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;
}
网友评论