快排的优化

快排的优化

  1. 快排的优化主要针对于递归来讲,快排有三种排序方式,两种优化方案:
  2. 排序方式:
    (1):固定位置选取基准法 (2):随机选取基准法 (3):三分取中法
    优化方案:
    (1):一定数量的数据范围内采取直接插入排序,因为在排序的过程当中数据越来越有序,直接插入排序时间复杂度更快。
    (2):聚集相同基准元素法,因为:有可能选取的基准,在左右两面都有相同的元素,我们可以将他们聚集到一起,以此来达到,减少比较次数的方案。
    我给出基本的递归算法:
  3. 代码实现:
public static int Partion(int[] arr,int low,int high) {
        int tmp = arr[low];
        while(low < high) {
            while((low < high) && arr[high] >= tmp) {
                high--;
            }
            if(low >= high) {
                break;
            } else {
                arr[low] = arr[high];
            }

            while(low < high && arr[low] <= tmp) {
                low++;
            }
            if(low >= high) {
                break;
            }
            else {
                arr[high] = arr[low];
            }
        }
        arr[low] = tmp;
        return low;
    }

    public static void Quick(int[] arr,int start,int end) {
        int par = Partion(arr,start,end);
        if(par > start+1)//左边是不是有两个数据以上 {
            Quick(arr,start,par-1);
        }
        if(par < end-1) {
            Quick(arr,par+1,end);
        }
    }

    public static void Quick_Sort(int[] arr) {
        Quick(arr,0,arr.length-1);
    }
发布了68 篇原创文章 · 获赞 2 · 访问量 1683

猜你喜欢

转载自blog.csdn.net/weixin_45923633/article/details/105113553