Quick sort 快速排序

来源:互联网 发布:java从入门到放弃 pdf 编辑:程序博客网 时间:2024/05/01 12:35

维基百科快速排序: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 numberif (left < right) {while(i < j) {while(i < j && n[j] >= temp) //find less than temp number form right to leftj--;if (i < j) {n[i] = n[j];i++;}while(i < j && n[i] < temp) //find big than temp number form left to righti++;if (i < j) {n[j] = n[i];j--;}}n[i] = temp; //swap base numberquick_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");}


0 0
原创粉丝点击