花几分钟轻松搞定快速排序算法

你的名字 2022-06-05 05:05 289阅读 0赞

这里写图片描述

  1. //快速排速算法,使用迭代 array待排序的数组, s是数组的首索引,t是最后一个元素索引
  2. void QuickSort(int[] array, int s, int t)
  3. {
  4. //定义变量保存被排序的数组索引
  5. int i = s, j = t;
  6. //一个元素就没有必要排序了吧,所以索引s必须小于t
  7. if(s < t)
  8. {
  9. //开始默认数组第一个记录做了基准点
  10. //什么意思呢,就是我们这个做为一个点,让其左边的都小于他,右边都大于他
  11. int temp = array[i];
  12. //开始两端扫描比较大小
  13. while(i != j) //只要i!=j 说明我们两端扫描就还没完
  14. {
  15. while(j >= i) //开启从右端到左边的扫描
  16. {
  17. if(array[j] > temp)
  18. {
  19. //开始左移动下标
  20. j--;
  21. }
  22. else
  23. {
  24. //那么需要移动当前基准点到当前比较的元素对应的索引处
  25. //我们把j索引对应的元素移动到了i处,那么j处就空了一个位置
  26. array[i] = array[j];
  27. break;
  28. }
  29. }
  30. //开始找大的填到j里
  31. while(i < j) //开启从左边到右边的扫描
  32. {
  33. if(array[i] < temp)
  34. {
  35. i++; //移动到下个元素
  36. }else
  37. {
  38. //说明找到了比基准元素大的,那么我们就把当前这个大的数移动到上次留下的坑
  39. array[j] = array[i];
  40. break; //并且要结束循环
  41. }
  42. }
  43. }
  44. }
  45. //执行到这来说明i == j了,说明我们扫描已经到了一个元素了那么这个元素肯定是空的
  46. array[i] = temp;
  47. //现在我们已经把基准点放在了正确位置,因为这个时候左边的全部小于他,右边的全部大于他
  48. //既然这个数搞定了,那么我们现在来排序这个数的两侧,我们用递归把,性质相同
  49. //左边递归
  50. QuickSort(array,s,j - 1);
  51. //右边递归
  52. QuickSort(array,j + 1,t);
  53. }

发表评论

表情:
评论列表 (有 0 条评论,289人围观)

还没有评论,来说两句吧...

相关阅读

    相关 快速排序 快速

    快速排序由于排序效率在同为O(N\logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等