【数据结构-排序问题】各种排序哦
来源:互联网 发布:淘宝董事长 编辑:程序博客网 时间:2024/06/05 17:50
这两天一直总结排序问题,然后话不多啦,直接上代码
最主要的是要学会快速排序和冒泡排序,其它排序要熟练即可。
#include<stdio.h>
#include<stdlib.h>
#define DataType int
void InsertSort(DataType A[], DataType len);
void BiInsertSort(DataType A[], DataType len);
void BubbleSort1(DataType A[], DataType len);//冒泡排序(从右至左)
void BubbleSort2(DataType A[], DataType len);//冒泡排序(从左至右)
void FastSort(DataType A[], int left, int right);//快速排序
void SelectSort(DataType A[], int len);//选择排序
DataType main(void)
{
DataType *A = (DataType *)malloc(sizeof(DataType));
DataType key;
DataType i = 1;
A[0] = 0;
printf("请您随便输入数字,然后本程序对这些数字从小到大排序!按#结束\n");
while (scanf("%d", &key) == 1)
{
A[i] = key;
i++;
}
printf("排序后的结果是:\n");
//BiInsertSort(A, i - 1);
SelectSort(A, i - 1);
DataType k;
for (k = 1; k <= i - 1; k++)
printf("%d ", A[k]);
return 0;
}
//折半查找排序减少了比较次数为o(nlog2n),但是时间复杂度仍为o(n2),稳定排序(插入排序)
void BiInsertSort(DataType A[], DataType len)
{
DataType i, j, low, high, mid;
for (i = 2; i <= len; i++)
{
A[0] = A[i];
low = 1; high = i - 1;
while (low <= high)
{
mid = (low + high) / 2;
if (A[mid] > A[0])//这个大小符号的改变就是改变了排序顺序(>是从小到大排序,<是从大到小排序)
high = mid - 1;
else
low = mid + 1;
}
for (j = i - 1; j >= high + 1; --j)
{
A[j + 1] = A[j];
}
A[high + 1] = A[0];
}
}
//直接插入排序比较次数为o(n2),时间复杂度为o(n2),稳定排序(插入排序)
void InsertSort(DataType A[], DataType len)
{
DataType i, j;
for (i = 2; i <= len; i++)
if (A[i] < A[i - 1])
{
A[0] = A[i];
for (j = i - 1; A[0] < A[j]; --j)
A[j + 1] = A[j];
A[j + 1] = A[0];
}
}
//从右至左的冒泡(外部循环从左至右,内部循环从右至左)复杂度(o(n2)),稳定( 交换排序)
void BubbleSort1(DataType A[], DataType len)
{
int i, j;
bool flag;
for (i = 1; i <= len; i++)
{
flag = false;
for (j = len; j >i; j--)
{
if (A[j - 1] > A[j])
{
A[0] = A[j - 1];
A[j - 1] = A[j];
A[j] = A[0];
flag = true;
}
}
if (flag == false)
break;
}
}
//从左至右的冒泡(外部循环从右至左,内部循环从左至右)( 交换排序)
void BubbleSort2(DataType A[], DataType len)
{
int i, j;
bool flag;
for (i = len; i >= 1; i--)
{
flag = false;
for (j = 1; j <i; j++)
{
if (A[j] > A[j + 1])
{
A[0] = A[j];
A[j] = A[j + 1];
A[j + 1] = A[0];
flag = true;
}
}
if (flag == false)
break;
}
}
int partition(DataType A[], int left, int right)
{
int pivot = A[left];
while (left < right)
{
if ((left<right) && (A[right] >= pivot))
--right;
A[left] = A[right];
if ((left < right) && A[left] <= pivot)
++left;
A[right] = A[left];
}
A[left] = pivot;
return left;
}
//快速排序,平均时间复杂度o(nlog2n),最好为o(log2n),最坏为o(n2).是不稳定排序( 交换排序)
void FastSort(DataType A[], int left, int right)
{
if (left < right)
{
int pivotloc = partition(A, left, right);
FastSort(A, pivotloc + 1, right);
FastSort(A, left, pivotloc - 1);
}
}
//简单选择排序,不稳定,o(n2)(选择排序)
void SelectSort(DataType A[], int len)
{
int i, j;
int min;
for (i = 1; i <= len; i++)
{
min = i;
for (j = i + 1; j <= len; j++)
{
if (A[j] < A[min])
min = j;
}
if (min != i)
{
int temp = A[i];
A[i] = A[min];
A[min] = temp;
}
}
}
- 【数据结构-排序问题】各种排序哦
- 数据结构:各种排序
- 数据结构中的各种排序
- 数据结构之各种排序
- 数据结构各种排序
- 数据结构中的各种排序
- 数据结构各种排序方法
- 数据结构-排序: 各种排序算法全分析
- 数据结构-排序: 各种排序算法全分析
- 数据结构-排序: 各种排序算法全分析
- 数据结构各种排序算法总结
- 数据结构各种内部排序课程设计
- 数据结构各种排序算法总结
- python 数据结构各种排序算法
- 数据结构中的各种排序算法
- [数据结构]各种排序算法比较
- 数据结构:JavaScript实现各种排序
- 数据结构各种排序的对比
- informatica TM_6247 检查全局对象权限时出错,REP_12400 存储库错误([REP_57145] 在数据库中未找到数据
- OpenGL编程逐步深入(二)在窗口中显示一个点
- 用Java多线程,将任务分步骤处理
- python package numpy和scipy 的安装与配置
- GoJS - 简介
- 【数据结构-排序问题】各种排序哦
- IE11不兼容网页解决办法
- 输入一行字符,统计其中有多少单词,单词之间用空格隔开
- hdoj 2553 N皇后问题 【经典搜索】
- C Primer Plus 练习 9-7
- 使用charles proxy for Mac来抓取手机App的网络包
- iOS从摄像头获得实时视频流(研究中)
- 黑马程序员Java基础第十一章----网络编程
- #笔记#圣思园 JavaSE 第26讲——包与导入语句剖析