快排实现基本思想:取个关键key值对整个序列进行比较,大的放一边,小的放另一边(这就分成两个序列了)。然后继续对两个序列(分开的)进行递归比较,最后实现整个序列的排序。
最坏情况的时间复杂度为O(n2),最好情况时间复杂度为O(nlog2n).
package com; //快速排序 public class quick { //主函数实现排后的输出显示 public static void main(String[] args){ int[]a = {21,32,1,332,42,3,12,78,96,23}; Quick1(a,0,a.length-1); for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } } //主体。。 public static int Quick(int[]a,int low,int high){ int key = a[low]; //挖坑,取数 while(low<high){ while(low<high && key <= a[high]){ --high; } a[low] = a[high]; //从后往前,比key小就往前移, while(low<high && key >= a[low]){ ++low; } a[high] = a[low]; //从前到后,比key大就往后移 } a[low] = key; //填坑 return low; } //递归调用,实现整体排序 public static void Quick1(int[]a,int low,int high){ int pivot; if(low<high){ pivot = Quick(a,low,high); Quick1(a,low,pivot-1); Quick1(a,pivot+1,high); } } }
时间: 2024-10-07 14:12:58