首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

快速排序的兑现

2013-10-08 
快速排序的实现快速排序的核心思想分为两步:1.选择任何一个数作为基准数,找到这个基准数的位置2.基准数一

快速排序的实现

快速排序的核心思想分为两步:

1.选择任何一个数作为基准数,找到这个基准数的位置

2.基准数一侧的数大于另一侧的数,对两侧进行排序,这是分治的思想


写过很多次都不记得,其实没掌握其思想,找到基准数位置必然要把这个数和所有的数都比较一边,大于这个数的数放到这个数的右边,小于这个数的数放到这个数的左边,最后这个数的位置就确定了

例如我们看一个例子:

int array[6] = {3 , 5 , 1, 2, 4, 6};

我们假定基准数为a[0] = 3, 找3的位置打过程如下:

快速排序的兑现


分析可知,算法结构是这样的:

/****************quick_sort.c made by cfmlovers************/#include <stdio.h>#define ARRAYSIZE 4/*find the position*/int partition(int a[], int l, int r){    int  i = l, j = r, temp = a[i];    while(i < j)    {        while(temp < a[j] && i < j)                j--;        if(i < j)            a[i++] = a[j];        while(a[i] < temp && i < j)                i++;        if(i < j)            a[j--] = a[i];    }       a[i] = temp;    return i;}void quick_sort(int a[], int l, int r){    int position;    if(l < r)    {        position = partition(a, l, r);        quick_sort(a, l, position-1);        quick_sort(a, position+1, r);    }}void main(){    int a[ARRAYSIZE], i;    printf("please input 4 numbers\n");    for(i = 0; i < 4; i++)        scanf("%d",&a[i]);    /*quick sort*/    quick_sort(a, 0, ARRAYSIZE-1);    for(i = 0; i < 4; i++)        printf("%d\n", a[i]);}

快速排序的效率取决于基准数所产生的分区,如果分区平衡和归并排序一样,如果分区不平衡,效率甚至和插入排序一样

热点排行