您的位置:首页 > 编程语言 > C语言/C++

C语言的几种排序方式

2015-02-27 22:05 204 查看
1、冒泡排序

它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名冒泡排序。

代码如下:

int array[] = {5, 4, 65, 3, 10, 15, 6};

int count = sizeof(array) / sizeof(array[0]);

int flag = 0;

for (int i = 0; i < count - 1 && 0 == flag; i++) {

flag = 1;

for (int j = 0; j < count - i - 1; j++) {

if (array[j] > array[j + 1]) {

int temp = array[j];

array[j] = array[j + 1];

array[j + 1] = temp;

flag = 0;

}

}

}

2、插入排序

每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。

代码如下:

int array[] = {5, 4, 65, 3, 10, 15, 6};

int count = sizeof(array) / sizeof(array[0]);

for (int i = count - 1; i > 0; i--) {

int temp = array[i];

int j = i;

while (j > 0 && array[j - 1] > temp) {

array[j] = array[j - 1];

j--;

}

array[j] = temp;

}

3、选择排序

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

代码如下:

for (int i = 0; i < count - 1; i++) {

int minIndex = i;

for (int j = i + 1; j < count; j++) {

if (array[j] < array[minIndex]) {

minIndex = j;

}

}

if (minIndex != i) {

int temp = array[i];

array[i] = array[minIndex];

array[minIndex] = temp;

}

}

4、快速排序

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

代码如下:

void quickSort(int array[], int count)

{

if (count < 2) {

return;

}

int start = 0, end = count - 1;

int temp = array[start];

while (start < end) {

while (start < end && array[end] > temp) {

end--;

}

if (start < end) {

array[start] = array[end];

start++;

}

while (start < end && array[start] < temp) {

start++;

}

if (start < end) {

array[end] = array[start];

end--;

}

}

array[start] = temp;

quickSort(array, start);

quickSort(array + start + 1, count - start - 1);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: