快速排序算法
1、算法概念
快速排序是对冒泡排序的一种改进,使用递归原理,在所有同数量级O(nlog2n)中,平均性能最好,且从平均时间上来说是被认为一种最好的排序算法。
2、算法思想
采用分治法的思想,通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
3、算法步骤
1)将0位置的元素作为pivotKey,以此作为比较对象。
2)比pivotKey小的数,放在pivotKey左边,比pivotKey大的不做处理。
3)分别进行左部,右部的递归,重复上述步骤直到排序结束。
4、算法函数
1)partition(int[] array,int left,int right)-分割函数(一次快排函数)找出比较轴,进行一次排序。
2)sort(int[] array,int left,int right)-递归函数,递归实现快排过程。
5、算法实现
1 package com.arithmetic.demo; 2 3 public class QuickSort { 4 //分解函数,进行一次快排 5 public static int partition(int[] array,int left,int right) 6 { 7 int pivotKey = array[left]; 8 while(left < right) 9 { 10 while(left < right && array[right] >= pivotKey) 11 { 12 right--; 13 } 14 array[left] = array[right]; 15 while(left < right && array[left] <= pivotKey) 16 { 17 left++; 18 } 19 array[right] = array[left]; 20 } 21 array[left] = pivotKey; 22 return left; 23 } 24 //递归函数,递归实现整个快排过程 25 public static void sort(int[] array,int left,int right) 26 { 27 if(left < right)//如果不加此判断,会导致递归无法退出而栈溢出异常 28 { 29 int pivot = partition(array,left,right); 30 sort(array,left,pivot-1); 31 sort(array,pivot+1,right); 32 } 33 34 } 35 //测试函数 36 public static void main(String[] args) 37 { 38 int[] array = {7,4,5,3,2,6,9,1}; 39 System.out.print("排序前:"); 40 for(int i=0;i<array.length;i++) 41 { 42 System.out.print(array[i]+" "); 43 } 44 45 sort(array,0,array.length-1); 46 47 System.out.print("\n排序前:"); 48 for(int i=0;i<array.length;i++) 49 { 50 System.out.print(+array[i]+" "); 51 } 52 53 } 54 55 }