快速排序实现
Posted dqwangi33
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序实现相关的知识,希望对你有一定的参考价值。
快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,从而使全部的数据有序。快排的平均时间复杂度是O(nlogn);最坏是O(n^2)。
1 public class QuickSort { 2 /** 3 * 测试 4 * @param args 5 */ 6 public static void main(String[] args) { 7 int[] num = {3,45,12,64,52,11,64,55,45,11,18}; 8 System.out.println(arrayToString(num)); 9 QuickSort(num,0,num.length-1); 10 System.out.println(arrayToString(num)); 11 12 } 13 14 /** 15 * 快速排序 16 * @param num 排序的数组 17 * @param left 数组的左下标 18 * @param right 数组的右下标 19 */ 20 private static int partition(int[] num, int left, int right){ 21 int key=num[left]; 22 //数组中比key小的放在左边,比key大的放在右边,key值下标为i 23 int i=left; 24 int j=right; 25 while(i<j){ 26 while(num[j]>=key && i<j) j--; //j向左移,直到遇到比key小的值才退出循环 27 while(num[i]<=key && i<j) i++; //i向右移,直到遇到比key大的值才退出循环 28 //交换i和j指向的元素 29 if(i<j){ 30 int temp=num[i]; 31 num[i]=num[j]; 32 num[j]=temp; 33 } 34 } 35 num[left] = num[i]; 36 num[i]=key; //把key交换到中间的位置 37 return i; 38 39 } 40 private static void QuickSort(int[] num, int left, int right) { 41 //如果left等于right,即数组只有一个元素,直接返回 42 if(left>=right) { 43 return; 44 } 45 int i = partition(num, left, right); 46 QuickSort(num,left,i-1); 47 QuickSort(num,i+1,right); 48 } 49 50 private static String arrayToString(int[] arr) { 51 String str = ""; 52 for(int a : arr) { 53 str += a + " "; 54 } 55 return str; 56 } 57 }
以上是关于快速排序实现的主要内容,如果未能解决你的问题,请参考以下文章