美文网首页
C快速排序

C快速排序

作者: 橙姜 | 来源:发表于2018-05-31 13:51 被阅读0次

    https://blog.csdn.net/yuzhihui_no1/article/details/44198701#
    最优时间复杂度:O(nlog2n)
    平均时间复杂度:O(nlog2n)
    最差时间复杂度:O( n^2 )

    include<stdio.h>

    // 打印数组
    void print_array(int *array, int length)
    {
    int index = 0;
    printf("array:\n");
    for(; index < length; index++){
    printf(" %d,", *(array+index));
    }
    printf("\n\n");
    }

    void quickSort(int array[], int length)
    {
    int start = 0;
    int end = length-1;
    int value = array[start];// 得到哨兵元素

     if (1 > length) return;// 递归出口
    
     while(start < end){// 以哨兵元素为标准,分成大于它和小于它的两列元素
    
         while(start < end){// 从数组尾部往前循环得到小于哨兵元素的一个元素
             if ( array[end--] < value ){
                 array[start++] = array[++end];
                 break;
             }
         }
    
         while( start < end ){// 从数组头部往后循环得到大于哨兵元素的一个元素
             if( array[start++] > value){
                 array[end--] = array[--start];
                 break;
             }
         }
     }
     array[start] = value;// 放置哨兵元素
     printf("\nstart:%d, end:%d\n", start, end);// 这个是测试下start和end是否一样
     quickSort(array, start);// 递归排序小于哨兵元素的那一列元素
     quickSort(array + start + 1, length - start - 1);// 递归排序大于哨兵元素的那一列
    

    }

    int main(void)
    {
    int array[12] = {1,11,12,4,2,6,9,0,3,7,8,2};
    print_array(array, 12);// 开始前打印下
    quickSort(array, 12);// 快速排序
    print_array(array, 12);// 排序后打印下
    return 0;
    }

    相关文章

      网友评论

          本文标题:C快速排序

          本文链接:https://www.haomeiwen.com/subject/xteqsftx.html