您的位置:首页 > 其它

【复习笔记】手写三种O(n^2)的基础排序算法

2017-08-09 20:14 295 查看
1.冒泡排序,稳定排序。

public static void bubbleSort(int [] array){

int len = array.length;

for(int i = 0; i < len - 1; ++i){
boolean canBreak = true;
for(int j = 0; j < len - i - 1; ++j){
if(array[j] > array[j + 1]){
canBreak = false;
swap(j, j + 1, array);
}
}
if(canBreak) break;
}
}

2.插入排序,稳定排序。且当元素数组接近有序时,性能较好,为O(n)
public static void insertSort(int [] array){

int len = array.length;

for(int i = len - 2; i >= 0; --i){

int insertIndex = -1;
for(int j = len - 1; j >= i; --j){
if(array[i] > array[j]){
insertIndex = j;
break;
}
}

if(insertIndex == -1) continue;
int temp = array[i];

for(int j = i; j < insertIndex; ++j){
array[j] = array[j + 1];
}
array[insertIndex] = temp;
}
}

3.选择排序,非稳定排序。复杂度基本上为O(n^2)不会变,因为总要遍历一遍去寻找最大值。
public static void chooseSort(int [] array){

int len = array.length;

for(int i = len - 1; i > 0; --i){
int maxIndex = 0;
for(int j = 0; j <= i; ++j){
if(array[j] > array[maxIndex])
maxIndex = j;
}
swap(maxIndex, i, array);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: