C快速排序

2018-05-31  本文已影响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;
}

上一篇 下一篇

猜你喜欢

热点阅读