快速排序在排序算法中,平均情况下时间复杂度是O(nlog2n),基本思想是:首先选择一个轴值,将待排序记录划分成独立的两部分,左侧记录的关键码均小于或等于轴值,右侧记录的关键码总大于等于轴值,然后分别对这两部分重复上述过程,直到整个序列有序,java代码实现如下:
package algorithm; /* * @author pardy * @describe 快速排序 * @param arrSort * 待排序数组 * @param first * 左侧下标 * @param end * 右侧下标 */ public class quickSort { //一次划分 public static int partition(int[] arrSort,int first,int end){ int i = first; int j = end; while(i<j){ while(i<j&&arrSort[i]<=arrSort[j]){ j--; //右侧扫描 } if(i<j){ int temp = arrSort[i]; //设置temp用于交换两个数 arrSort[i]=arrSort[j]; arrSort[j]=temp; i++; } while(i<j&&arrSort[i]<=arrSort[j]){ i++; } if(i<j){ int temp = arrSort[i]; //设置temp用于交换两个数 arrSort[i]=arrSort[j]; arrSort[j]=temp; j--; } } return i; } //快速排序 public static void sort(int[] arrSort,int first,int end){ //数组长度大于0 if(arrSort.length>0){ if(first<end){ int pivot = partition(arrSort, first, end);//一次划分,获取轴值 sort(arrSort,first,pivot-1);//递归对左侧序列进行快速排序 sort(arrSort,pivot+1,end);//递归对右侧序列进行快速排序 } } } public static void main(String[] args) { int[] arrSort={2,6,7,8,1}; sort(arrSort,0,arrSort.length-1); System.out.print("快速排序结果:"); for (int i : arrSort) { System.out.print(i+" "); } } }
