概述
参考https://www.zybuluo.com/MicroCai/note/77440
http://www.jianshu.com/p/ae97c3ceea8d
用到的数据结构都是数组(array)
稳定排序
稳定排序是指:若是数组中有相同的元素,则相同的元素的相对位置不变。
排序名称 | 最好 | 最坏 | 平均时间复杂度 | 空间复杂度 | 备注 |
---|---|---|---|---|---|
冒泡(Bubble Sort) | O(n) | O(n²) | O(n²) | O(1) | |
插入(Insertion Sort) | O(n) | O(n²) | O(n²) | O(1) | |
桶排序(Bucket Sort) | O(n+k) | O(n²) | O(n+k) | O(nk) | 最快 |
计数排序(Counting Sort) | O(n+k) | O(n+k) | O(n+k) | ||
归并排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(n) | |
二叉排序树 | O(n²) | O(nlogn) | O(n) | ||
基数排序(Radix Sort) | O(nK) | O(nK) | O(nK) | O(n+k) |
不稳定排序
排序名称 | 最好 | 最坏 | 平均时间复杂度 | 空间复杂度 | 备注 |
---|---|---|---|---|---|
选择排序(Selection Sort) | O(n²) | O(n²) | O(n²) | O(1) | |
希尔排序(Shell Sort) | O(n) | O(n²) | O(n^1.5) | O(1) | |
堆排序(Heap Sort) | O(nlogn) | O(nlogn) | O(nlogn) | O(1) | |
快速排序(Quicksort) | O(nlogn) | O(n²) | O(nlogn) | O(n) |
前言
注意:本案例中实现的都是从小到大的排序,请注意从大到小的排序
主函数:
public static void main(String[] args) {
int[] a={
34,21,5,2,3,12,56,13,37,22};
BubbleSort(a);
for(int one:a){
System.out.print(one+" ");
}
}
1. 冒泡排序
1. 基本思想:两个数比较大小,较大的数下沉,较小的数冒起来。
2. 过程:第一趟,从后向前遍历n-1个元素,比较所有相邻元素,将最小的元素交换到数组最前面。第二趟,从后向前遍历n-2个元素,比较所有相邻元素,将第二小的元素交换到数组第2的位置
3. 算法样例
4. 代码实现:
public static void BubbleSort(int[]arr){
int temp;
int len=arr.length;
for(int i=0;i<len-1;i++)第i趟,一共length-1趟
for(int j=len-1;j>i;j--)//从后向前遍历,比较相邻的两个元素
if(arr[j]<arr[j-1]){
//相邻的元素后面的元素比前面的小,则交换位置,将小的元素向前交换
temp=arr[j];
arr[j]=arr[j-1];
arr[j-