package cn.java.partion;
import java.util.Arrays;
public class MyQuickSort2 {
public static void main(String[] args) {
int[] num=new int[]{2,100,2,4,46,3,46,67,67,28};
QuickSort(num,0,num.length-1);
System.out.println(Arrays.toString(num));
}
public static void QuickSort(int[] num,int low,int high){
if(low<high){
int k =partion(num, low, high);
QuickSort(num, low, k-1);
QuickSort(num, k+1, high);
}
}
public static int partion(int[] num,int low,int high){
int pivot=num[low];
while(low<high){
while(low<high&&num[high]>=pivot) high--;
num[low]=num[high];
while(low<high&&num[low]<=pivot) low++;
num[high]=num[low];
}
num[low]=pivot;
return low;
}
}
快速排序,时间复杂度最好是nlog2(n+1),平均是nlog2(n+1),最差整个数组基本有序下是n2。空间复杂度是log2n。空间复杂度最好情况是log2n,最差是n。
package cn.java.partion;
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
int[] num=new int[]{2,100,2,4,46,3,46,67,67,28};
sort(num);
System.out.println(Arrays.toString(num));
}
public static void sort(int[] num){
for(int i=0;i<num.length-1;i++){ //一共要N-1趟冒泡排序
boolean flag =false;
for(int j=num.length-1;j>i;j--){ //从后往前一趟冒泡排序
if(num[j]<num[j-1]){
swap(j,j-1,num);
flag=true;
}
}
if(flag==false) //有序
break;
}
}
private static void swap(int j, int i, int[] num) {
int temp=num[i];
num[i]=num[j];
num[j]=temp;
}
}
冒泡排序,最好的时间复杂度是n,平均和最差都是n2。