排序算法
1.冒泡排序:
冒泡排序一共要进行(n-1)次循环,每一次循环都要进行当前n-1次比较
所以一共的比较次数是:
(n-1) + (n-2) + (n-3) + … + 1 = n*(n-1)/2;
所以冒泡排序的时间复杂度是 O(n2),空间复杂度O(1)
所以一共的比较次数是:
(n-1) + (n-2) + (n-3) + … + 1 = n*(n-1)/2;
所以冒泡排序的时间复杂度是 O(n2),空间复杂度O(1)
int a[]= {6,5,0,4,2,1,3,9,8};
int n=a.length;
for(int i=0;i<n-1;i++) {
boolean flag=false;
for(int j=0;j<n-i-1;j++) {
if(a[j]>a[j+1]) {
int t=a[j+1];
a[j+1]=a[j];
a[j]=t;
flag=true; //此次循环进行了交换
}
}
if(!flag) //已经有序,可直接退出
break;
}
for(int i:a) {
System.out.print(i+" ");
} 2.快速排序
时间复杂度为O(nlogn)
public static void main(String[] args) {
int[] arr = {10,7,2,4,7,62,3,4,2,1,8,9,19};
quickSort(arr, 0, arr.length-1);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
public static void quickSort(int[] arr,int low,int high) {
if(low>high){
return;
}
int tmp=arr[low];
int i=low,j=high;
while(i<j) {
while(arr[j]>=tmp && i<j) {
j--;
}
while(arr[i]<=tmp && i<j) {
i++;
}
//交换 i j两个位置的元素
if(i<j) {
int t=arr[j];
arr[j]=arr[i];
arr[i]=t;
}
}
arr[low]=arr[i];
arr[i]=tmp;
quickSort(arr, low, j-1);
quickSort(arr, j+1, high);
}
