快速排序
直接上代码:
时间复杂度:
最优O(nlog2n),
最坏时间复杂度为 O(n^2) ,
平均时间复杂度为O(nlog2n) 。
空间复杂度:O(log2n))
package sort;
/**
* @author sunny龙龙哥
* @createTime 16:46:19 星期四 2019年10月10日
*/
public class Main {
public static void main(String[] args) {
int array[]= {6 ,1, 2, 7, 9, 3, 4, 5, 10, 8};
quickSort(array,0,array.length-1);
for (int i : array) {
System.out.print(i+" ");
}
}
public static void quickSort(int array[],int low,int heigh) {
if(low<heigh) {
int index = getIndex(array,low,heigh);
quickSort(array,low,index-1);
quickSort(array,index+1,heigh);
}
}
public static int getIndex(int array[],int low,int heigh) {
int temp = array[low];
//整体循环,将low和heigh向中间移动 low==heigh跳出
while(low<heigh) {
//先从后面开始比较,在low<heigh的情况下,
//若temp<=array[heigh]则heigh--,然后进行继续进行比较,
//若temp>array[heigh]则将array[heigh]赋给array[low],跳出该小循环
while(low<heigh&&temp<=array[heigh]) {
heigh--;
}
array[low] = array[heigh];
//然后从后面开始比较,在low<heigh的情况下,
//若temp>=array[low]则low++,然后进行继续进行比较,
//若temp<array[low]则将array[low]赋给array[heigh],跳出该小循环
while(low<heigh&&temp>=array[low]) {
low++;
}
array[heigh] = array[low];
//当low==heigh时,跳出大循环
}
array[low] = temp;//将temp还回去;
return low;//此时的low和heigh所处的位置就是索引了 把数组分成了前小后大的两份
}
}