快速排序(递归)

快速排序

设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。

 一趟快速排序的算法是:

1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;

2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];

3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;

4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;

5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。


void quickSort(int count, int array[])

{

//退出递归

if (count < 2) {

//出口

return;

}int start = 0;

int end = count - 1;

int temp = array[start];

while (start < end) {

while (start < end && array[end] > temp) {

end --;

}if (start < end) {

array[start] = array[end];

start ++;

}while (start < end && array[start] < temp) {

start ++;

}if (start < end) {

array[end] = array[start];

end --;

}}array[start] = temp;

quickSort(start, array);

quickSort(count - start - 1, array + start + 1);

}

主函数调用

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

int count = sizeof(array) / sizeof(array[0]);

//快排

quickSort(sizeof(array) / sizeof(array[0]) , array);

for (int i = 0; i < count;  i ++) {

printf("%d",array[i]);

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,350评论 0 33
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,932评论 18 399
  • 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序...
    jiangliang阅读 5,234评论 0 1
  • 那年懵懂时光,笑容灿烂轻狂 你说地久天长,流年转瞬飘扬 手捧红豆张望,鸿雁如何思量 还是留下念想,终究世间相忘 豆...
    林云翼阅读 2,548评论 0 1
  • 我原本一直是喝白开水的,因为我始终相信,只有白开水才无毒无害。第一次喝茶也纯属偶然。清明节下午,在微信里看到一张绿...
    樱桃与狗阅读 3,759评论 0 0