快速排序实现
算法思想
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
实现思路
①以第一个关键字 K 1 为控制字,将 [K 1 ,K 2 ,…,K n ] 分成两个子区,使左区所有关键字小于等于 K 1 ,右区所有关键字大于等于 K 1 ,最后控制字居两个子区中间的适当位置。在子区内数据尚处于无序状态。
②把左区作为一个整体,用①的步骤进行处理,右区进行相同的处理。(即递归)
③重复第①、②步,直到左、右区处理完毕。
java实现:
1 package interview.tree.interview; 2 3 /** 4 * Created by BUAA514 on 2018-08-07. 5 */ 6 public class QuickSort { 7 /** 8 * description : 快速排序 9 * @param n 10 * @param left 11 * @param right 12 * @return 13 */ 14 public static void quicksort(int n[], int left, int right) { 15 int dp; 16 if (left < right) { 17 dp = partition(n, left, right); 18 quicksort(n, left, dp - 1); 19 quicksort(n, dp + 1, right); 20 } 21 } 22 23 /** 24 * 25 * @param n 26 * @param left 27 * @param right 28 * @return 指定比较元素(选择第一个元素)在排序后的下标 29 */ 30 public static int partition(int n[], int left, int right) { 31 int pivot = n[left]; 32 while (left < right) { 33 while (left < right && n[right] >= pivot) 34 right--; 35 if (left < right) 36 n[left++] = n[right]; 37 while (left < right && n[left] <= pivot) 38 left++; 39 if (left < right) 40 n[right--] = n[left]; 41 } 42 n[left] = pivot; 43 return left; 44 } 45 46 47 48 public static void main(String[] args) { 49 int[] testData = {25,89,47,65,12,3,5,8,96,45,78,41,25}; 50 System.out.println("排序之前:"); 51 for (int i = 0; i < testData.length; i++) { 52 System.out.print(testData[i] + " "); 53 } 54 55 // 快速排序 56 quicksort(testData,0,testData.length-1); 57 58 System.out.println(); 59 System.out.println("排序之后:"); 60 for (int i = 0; i < testData.length; i++) { 61 System.out.print(testData[i] + " "); 62 } 63 } 64 65 66 }
专注搬砖,擅长搬砖砸自己的脚~~~
Email:
ltwbuaa@163.com

浙公网安备 33010602011771号