Java快速排序(固定基准元)

今天为大家介绍固定基准元的快速排序
首先它是一种排序算法,排序算法是为了让无序的数据组合变成有序的数据组合。有序的数组在进行数据定位和采用时非常方便,因为有序的数据可以减少设计代码的麻烦因为无序数据进行推断前后关系时会显得很繁琐。

若数据较大则采用快速排序,快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短。

固定基准元:即选取数组块第一个元素作为基元

快速排序分为三个步骤

1.选择基准:选取第一个元素作为基准

2.分割操作:以该基准在序列中的实际位置,把序列分成两个子序列。此时,在基准左边的元素都比该基准小,在基准右边的元素都比基准大

3.递归操作:对两个序列块进行快速排序,直到序列为空或者只有一个元素

以下是我的代码和一些注释

[java]  view plain  copy
  1. private int[] data;  
  2.     QuickSort(int[] data) {  
  3.         this.data = data;  
  4.     }  
  5.   
  6.     public void startSort(int low, int high) {  
  7.         if (low >= high)  
  8.             return;  
  9.         int partition = Partition(low, high);  
  10.         // 以第一个元素为基准元素,大于基准元素的在右边,小于的在左边  
  11.         startSort(low, partition - 1);  //递归调用左半边数组
  12.         startSort(partition + 1, high);   //递归调用右半边数组
  13.   
  14.     }  
  15.   
  16.     /* 
  17.      * 将数组分成两块,返回基准元素在数组中的位置 
  18.      *  
  19.      * @param arr待排序数组 
  20.      *  
  21.      * @param low,high 规定数组中的待排序数据块位置 
  22.      */  
  23.     public int Partition(int low, int high) {  
  24.         int begin = low;  
  25.         int end = high;  
  26.         int key = data[low];// 取该数组的第一个元素作为基准元素  
  27.         while (begin < end) {  
  28.             while (begin < end && data[end] >= key) {  
  29.                 end--;  
  30.             }  
  31.             data[begin] = data[end];// 第一处,从后开始找到第一个小于key的元素,将这个元素放到begin位置  
  32.             // key复制了原来的值,不会被覆盖)  
  33.             while (begin < end && data[begin] <= key) {  
  34.                 begin++;  
  35.             }  
  36.             data[end] = data[begin];// 第二处,从前开始往后找到第一个大于key的元素,比较好begin和end的大小,将这个元素放到end位置  
  37.   
  38.         }  
  39.         data[begin] = key;// 第三处,基准元素居中,将复制好的key放到中间位置  
  40.         return begin;  
  41.   
  42.     }  
  43.   
  44.     public void display() {  
  45.         for (int i = 0; i < data.length; i++) {  
  46.             //输出数组  
  47.             System.out.println(data[i]);  
  48.         }  
  49.     }  
  1. public static void main(String[] args) {//重新定义一个类  
  2.     int[]num={8,1,20,15,25,6,4};  
  3.     QuickSort q=new QuickSort(num);//实例化Quicksort  
  4.     q.startSort(0, num.length-1);  
  5.     q.display();  
  6. }  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值