您的位置:首页 > 产品设计 > UI/UE

Quick sort 快速排序

2015-09-10 08:32 309 查看
维基百科快速排序:https://en.wikipedia.org/wiki/Quicksort

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

排序动画:



示例:



总结分为三步:

1)先从数列中取出一个数作为基数。

2)将比这个数大的数全部放到右边,小于等于它的数全部放在左边。

3)再对左右区间重复第二步,直到各个区间只剩下一个数。

代码:

#include <stdio.h>

void quick_sort(int n[], int left, int right)
{
int i = left;
int j = right;
int temp = n[left]; //base number

if (left < right) {
while(i < j) {
while(i < j && n[j] >= temp) //find less than temp number form right to left
j--;
if (i < j) {
n[i] = n[j];
i++;
}

while(i < j && n[i] < temp) //find big than temp number form left to right
i++;
if (i < j) {
n[j] = n[i];
j--;
}
}
n[i] = temp; //swap base number

quick_sort(n, left, i - 1);
quick_sort(n, i + 1, right);
}
}

int main()
{
int number[] = {3, 7, 8, 5, 2, 1, 9, 5, 4};
int len;
int i;

len = sizeof(number)/sizeof(number[0]);
quick_sort(number, 0, len - 1);

printf("\n");
for (i = 0; i < len; i++) {
printf("%d ", number[i]);
}
printf("\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: