排序算法-快速排序

蔚落 2022-06-01 06:17 375阅读 0赞

快速排序 是最高效、不占用空间的一种排序算法

快排的精髓 是在于 找到 中间基数。
比中间基数小的放在左边 ,比中间基数大的放在右边
然后 左右各自进行快排。

参考博客:http://developer.51cto.com/art/201403/430986.htm

这里写图片描述

首先 以数组第一个数字作为基数
数组从最左是低位,最右是高位

刚开始 低位 就是基数
比较基数 和 高位 如果基数比高位小 高位减减
直到 基数大于 高位 交换位置
然后比较低位 和 基数
低位 小于基数 低位加加
直到低位大于基数 交换位置
又开始比较高位 ……

直到 低位下标和高位下标重合 (低位下标不小于高位)

然后将基数赋值给 低位(或高位)

第一次比较 结束 比基数小的 在左边 比基数大的在右边

将 基数 下标返回 迭代 继续对左右两边 进行排序

实现代码:

  1. package quicksort;
  2. import java.util.Arrays;
  3. public class QuickSort {
  4. public static void main(String[] args) {
  5. int[] arr = {
  6. 34,45,12,89,25,76,44,90,1,62,59};
  7. quickSort(arr,0,arr.length-1);
  8. System.out.println(Arrays.toString(arr));
  9. }
  10. public static int getMiddle(int[] arr,int low,int high){
  11. int tmp =arr[low];
  12. while(low<high){
  13. while (low<high && arr[high]>tmp){
  14. high--;
  15. }
  16. arr[low]=arr[high];
  17. while (low<high && arr[low]<tmp){
  18. low++;
  19. }
  20. arr[high]=arr[low];
  21. }
  22. arr[low] =tmp;
  23. return low;
  24. }
  25. public static void quickSort(int[] arr,int low,int high){
  26. if(low<high){
  27. int i = getMiddle(arr,low,high); //将数组一分为二
  28. quickSort(arr,low,i-1);
  29. quickSort(arr,i+1,high);
  30. }
  31. }
  32. }

发表评论

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

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

相关阅读

    相关 排序算法——快速排序

    排序算法——快速排序 > 快速排序通过一趟排序将待排序序列分隔成独立的两部分,其中一部分序列的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个

    相关 排序算法快速排序

    首先快速排序,数据结构学完之后,把一些排序只是懂思想,一直没有实现,今天花时间实现了一下 快速排序的思想就是每次从一段中随机选一个数,把这一段中比它小的元素放在这个元素的前

    相关 排序算法——快速排序

    前言 快速排序采用了分治法,即将原问题划分成为若干个规模更小且与原问题相似的子问题,然后递归地解决这些子问题,最后将他们组合起来。 快速排序的思想是:假设数据元素存放在

    相关 排序算法-快速排序

    快速排序 是最高效、不占用空间的一种排序算法 快排的精髓 是在于 找到 中间基数。 比中间基数小的放在左边 ,比中间基数大的放在右边 然后 左右各自进行快排。 参考

    相关 排序算法---快速排序

    基本思路: 快速排序,数组冲两边出发。 首先取一个关键字。 在第一次排序后。 大于和小于 关键字的各在 关键字两边。 然后在对两边 重复上面步骤,取关键字,排序。 直