C语言排序有哪些方法 详细点

RT

排序方法吗应该和语言没有太紧密的关系,关键看数据类型和结构,一般常用的排序方法有:
1 插入排序——细分的话还可有(1)直接插入排序(2)折半插入排序(3)希尔排序(4)2-路插入排序(5)表插入排序 等
2 比较排序——如冒泡排序,快速排序 等
3 选择排序——如简单选择排序,树形选择排序,堆排序 等
4 归并排序——简单的如 2-路归并排序 等
5 基数排序
等等
一般情况下,如果数据不大,只是简单的自己练习或简单的几个十几个或几十个数据的话,效率分不出多少来,常用冒泡,直接插入,简单选择这几种简单的时间复杂度为O(n2)的排序方法就可以。这里举一个简单的小例子——比较排序中的——冒泡排序 如下:

//其中a[]是用于排序的数组变量的首地址,也即数组名,a[0]不放数据,
//用于交换时的辅助存储空间,数据从a[1]开始存放,n表示存放的数据个数
void bubble_sort(int a[], int n){
int i = 0, j = 0, change = 0;//change用于记录当前次比较是否进行了交换
for(i = n - 1, change = 1; i >= 1 && change; i--){//如果change是0,即已经排好序不用再进行比较了
change = 0;//将当前次的change赋值为0,记录不交换即下次不用比较了
for(j = 1; j <= i; j++){//内循环依次将相邻的两个记录进行比较
if(a[j] > a[j+1]){//小的前移,最大的移动到本次的最后一项去
a[0] = a[j+1];
a[j+1] = a[j];
a[j] = a[0];
change = 1;//进行了交换的标记
}
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-23
大概有如下的几类:
冒泡排序,选择排序, 希而排序,快速排序,堆排序,合并排序,基数排序等等!
冒泡排序:
42,35,7,89,34,65,12,9;
第一次:以第一个位置的数作为关键字依次和后面的数进行比较,如果比第一个小,就和第一个位置的数进行交换,找出最小的数。
7,42,35,89,34,65,12,9
第二次:以第二个位置的数作为关键字依次和后面的数进行比较,如果比第二个位置的数小,就和第二个位置的数进行交换,找出最小的数。
7,9,42,89,35,65,34,12
第三次:以第三个位置的数作为关键字依次和后面的数进行比较,如果比第三个位置的数小,就和第三个位置的数进行交换,找出最小的数。
7,9,12,89,42,65,35,34