快速排序Java实现

来源:互联网 发布:希腊棺材之谜 知乎 编辑:程序博客网 时间:2024/06/05 18:23

快速排序主题思想:

分区法+挖坑填数法。 
  1、先从数列中取出一个数作为枢纽关键字,一般用第一个元素 
  2、分区过程,将比这个枢纽关键字大的数全放在它的右边,把小于或者等于的数全放在它左边 
  3、再对左右分区进行第二步的操作,也就是递归。知道各个区间只有一个数为止

时间复杂度:

快速排序不断的进行递归,将比枢纽关键字小的放在左边,否则放在右边,平均情况下需要递归log2N次,在最坏情况下,即数组已经有序或大致有序的情况下,每次划分只能减少一个元素,需要递归n次,所以快速排序时间复杂度下界为O(nlogn),最坏情况为O(n^2)。在实际应用中,快速排序的平均时间复杂度为O(nlogn)。

public class Qsort {public  int partition (int a[],int low,int high){int key=a[low];//int i=low;//int j=high;if(low<high){while (low<high){while (low<high&&a[high]>=key)//从右边循环直到找到比关键字小的项才退出{high--;}if (low<high)  //将比关键字小的值赋值到左边{a[low]=a[high];low++;}while (low<high&&a[low]<=key) //从左边循环直到找到比关键词大的项才退出{low++;}   if (low<high) //将比关键字大的值赋到右边   {a[high]=a[low];high--;   }          }a[low]=key;}return low;}public  void lsort(int a[],int low, int high){if (low<high){int i=partition(a,low,high);lsort(a,low,i-1);lsort(a,i+1,high);}}public static void main(String[] args){ Qsort qs =new Qsort();int a[]={49,38,65,97,76,13,27,30}; qs.lsort(a,0,a.length-1);for (int i:a)System.out.println(i);}}



 

原创粉丝点击