java排序算法3(冒泡排序、快速排序)
冒泡排序---稳定
冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
for (int i = 0; i <arr.length-1; i++) {//第几轮
boolean flag=false;//是否交换过
for (int j = 0; j <arr.length-i-1; j++) {//两两比较
if (arr[j]>arr[j+1]){
int tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
flag=true;
}
}
if (!flag) {//如果没有交换,说明提前排好序了,直接结束
break;
}
}
平均时间复杂度 | 最好 | 最坏 | 空间复杂度 |
---|---|---|---|
O(n²) | O(n) | O(n²) | O(1) |
快速排序---不稳定
双边快排
//快速排序
public void QuickSort(int[] arr, int l, int h) {
if (l >= h) {
return;
}
int tmp = arr[l];//第一个数为基准
int i = l;
int j = h;
while (i < j) {
//j从右向左
while (i < j && arr[j] > tmp) {
j--;
}
//i从左向右走
while (i < j && arr[i] <= tmp) {
i++;
}
swep(arr, i, j);
}
//基点交换
swep(arr, l, j);
QuickSort(arr,l,i-1);//左边递归
QuickSort(arr,i+1,h);
// return i;
}