基础算法之排序--快速排序

来源:互联网 发布:mac pro拆解 编辑:程序博客网 时间:2024/05/29 19:04
/*************************************************************************************** Function     : 快速排序* Create Date  : 2014/04/21* Author       : NTSK13* Email        : beijiwei@qq.com* Copyright    : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。*                任何单位和个人不经本人允许不得用于商业用途* Version      : V0.1                    ***************************************************************************************                    基础算法之排序--快速排序   3 1 7 5 8 4 9 0 2 6步骤:1)选取base 为最左边的3,最小序号为0(left=0),最大序号为9(right=9)2)从最右边开始,向左查找到第一个小于base的数字,序列号为j,放在序号为0的位置,也就是取得base值的位置.3)从最左边开始,向右查找到第一个大于base的数字序列号为i,放在上次查找小于base的位置,序列号j4)循环执行  步骤2) 和 步骤  3) ,直到 i >= j. 此时序列号i的左侧全是小于base的数,  序列号i的右侧全是大于base的数,5)把base值放在序列号为i的位置6)分别递归调用left到 i-1, i+1到 right 进行快排注意  left小于right 是可以进行递归的条件.**************************************************************************************/  #include<stdio.h>              #define MY_FUNC  1#if MY_FUNC  #define M 10int data[M]={0};void quick_sort(int array[],int left,int right);// The first method:int main()  {      int i=0;    freopen("input.txt","r",stdin);    for(i=0;i<M;i++)        scanf("%d",&data[i]);  // get input data               printf("Before quick sort : \n");    fflush(stdout);     for(i=0;i<M;i++) {         printf("%d \t",data[i]);         fflush(stdout);     }    quick_sort(data,0,M-1);    printf("\nAfter quick sort : \n");    fflush(stdout);    for(i=0;i<M;i++) {        printf("%d \t",data[i]);        fflush(stdout);     }    return (0);}  void quick_sort(int array[],int left,int right){    int base=array[left];//选定base    int i=left;//左侧序号    int j=right;//右侧序号    if(left < right)    {        while(i<j)        {            //注意下边while循环里 i<j是必须加入的            while(i<j && array[j]>base)//right --> left 从数组最右侧 开始往左找比base小的数; 如果找到的话,放在最左边                j--;            array[i]=array[j];            //注意下边while循环里 i<j是必须加入的            while(i<j && array[i]<base)//left -->right 从数组最左侧 开始往 找比base大的数; 如果找到的话,放在最右边                i++;            array[j]=array[i];        }        array[i]=base;        quick_sort(array,left,i-1);        quick_sort(array,i+1,right);    }    else        return ;}    /********************************************my function end**************************************************/  #else  #define M 10int data[M]={0};int division(int a[],int left,int right);void quick_sort(int a[],int left,int right);// The second method:    int main()  {    int i=0;    freopen("input.txt","r",stdin);    for(i=0;i<M;i++)        scanf("%d",&data[i]);  // get input data    printf("Before quick sort : \n");    fflush(stdout);     for(i=0;i<M;i++) {         printf("%d \t",data[i]);         fflush(stdout);     }    quick_sort(data,0,M-1);    printf("\nAfter quick sort : \n");    fflush(stdout);    for(i=0;i<M;i++) {        printf("%d \t",data[i]);        fflush(stdout);     }    return (0);} int division(int a[],int left,int right){    int base=a[left];    while(left<right)    {        while(left<right && a[right]>base)            --right;        a[left]=a[right];        while(left<right && a[left]<base)            ++left;        a[right]=a[left];    }    a[left]=base;    return left;}void quick_sort(int a[],int left,int right){    int i=0;    if(left<right)    {        i=division(a,left,right);        quick_sort(a,left,i-1);        quick_sort(a,i+1,right);    }}#endif  


0 0
原创粉丝点击