快速排序

来源:互联网 发布:室内装修设计软件 编辑:程序博客网 时间:2024/06/13 02:46

一、概念

快速排序是对冒泡排序的一种改进:记录的比较和移动是从两端向中间进行的,关键码较大的记录一次就能从前面移动到后面,关键码较小的记录一次就能从后面移动到前面,记录移动的距离较远,从而较少了总的比较次数和移动次数。

基本思想:首先选取一个轴值(povit,即比较的基准),将待排序记录划分为独立的两部分,左侧记录的关键码均小于或等于轴值,右侧记录的关键码均大于或等于轴值,然后分别对两部分重复上述过程,直到整个序列有序。

 

二、复杂度

 

排序方法  最差时间分析 最好时间分析 平均时间复杂度 空间复杂度 稳定性 快速排序 O(n2) O(nlog2n) O(nlog2n) O(log2n)-O(n) 不稳定

 

三、代码实现

 1 package sort; 2  3 public class QuickSort { 4     static int count = 1; 5     public static int partition(int[] array,int low, int high){ 6         //选取轴值 7         int key = array[low]; 8         while(low < high){ 9             //从后往前扫描10             while(array[high] >= key && low < high){11                 high--;12             }13             //此时array[low]>=array[high],交换值14             array[low] = array[high];15             //从前往后扫描16             while(array[low] <= key && low < high){17                 low++;18             }19             array[high] = array[low];20         }21         array[high] = key;22         printArray(array,count++);23         return high;24     }25     public void quicksort(int[] array, int low, int high){26         if(low >= high)27             return;28         int index = partition(array, low, high);29         quicksort(array,low,index-1);30         quicksort(array,index+1,high);31         32     }33     //打印每次排序的结果34         public static void printArray(int a[],int count){35             if(count != 0)36             System.out.print("第" + count + "次   ");37             for(int m = 0; m < a.length; m++){38                 System.out.print(a[m] + " ");39             }40             System.out.println();41         }42         public static void main(String[] args) {43             QuickSort ms = new QuickSort();44             int array[] = {7, 2, 8, 3, 1, 6, 9, 0, 5, 4};45             ms.quicksort(array, 0, array.length-1);46         }47 }

 

 

原创粉丝点击