简单的实现快速排序(适合小白入门)
1 /* 2 此篇博文适用于像我一样的小白; 3 首先,你要大概了了解快排的基本原理; 4 快排的实现有网上很多种,我自认为下面这种相对好理解的; 5 废话不多说,上代码; 6 注:下面的实现对数组元素升序的快速排序方法; 7 8 */ 9 class QuickSort { 10 public static void main(String[] args) { 11 int[] a = {1, 8, 5, 9, 0, 2}; 12 13 int start = 0; 14 int end = a.length - 1; 15 quickSort(a, start, end);//应用快速排序方法 16 17 //显示排序后的数组 18 for(int i: a) { 19 System.out.println(i); 20 } 21 } 22 23 /**快速排序方法*/ 24 /**a:要排序的数组 25 * start:这里选取的是第一个数,这里是索引号,始终拿这个数和其他数比较, 26 * end;最后一个元素,这里是索引号; 27 */ 28 public static void quickSort(int[] a, int start, int end) { 29 //flag表示快排时游标移动的方向;若为false表“左->右”,若为true表“右->左”; 30 boolean flag = true; 31 int i = start; 32 int j = end; 33 34 if(i >= j) { // 判断是否到中间了,这也是递归的结束条件; 35 return ; 36 } 37 38 while(i != j) { 39 //若是前面的数大于后面的数,那么两个数就交换; 40 if(a[i] > a[j]) { 41 int t = a[i]; 42 a[i] = a[j]; 43 a[j] = t; 44 //只有经过数的交换后,才能把游标移动的方向改变; 45 flag = !flag; 46 } 47 //根据flag的值决定下标移动,还是上标移动 ,使游标更改走下一个数据; 48 if(flag) 49 j--; 50 else 51 i++; 52 } 53 //上面的循环结束后,i和j都指向同一位置;要进行下一次的排序,就要将i,j分别移向两边; 54 i--; 55 j++; 56 //通过递归实现整体的快速排序; 57 quickSort(a, start, i); 58 quickSort(a, j, end); 59 } 60 }
如果我引用您的博文记录,没有指出,请求您的原谅。可以私信告诉我,我一定改正!
注:我写博文的目的主要是记录得失,若有什么误人子弟的地方,请多多见谅指正;