快速排序算法

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("
排序前:");
48         for(int i=0;i<array.length;i++)
49         {
50             System.out.print(+array[i]+" ");
51         }
52         
53     }
54 
55 }
原文地址:https://www.cnblogs.com/fxust/p/4973926.html