您的位置:首页 > 其它

【从头开始学算法】选择排序 插入排序 冒泡排序

2015-09-26 17:03 357 查看
需求:对数组中数字进行排序

选择排序:

思想:从头开始,最小值和第一个交换,次小值和第二个交换。。。。。

private static void SelectionSort(int[] arr) {
for(int i=0;i<arr.length;i++){
int min=i;
for(int j=i+1;j<arr.length;j++){
if(arr[j]<arr[min]){
min=j;
}
}
int tmp = arr[min];
arr[min] =arr[i];
arr[i]=tmp;
}
}


最好情况=最差情况=O(n^2)

插入排序:

思想:假定前面i个已经排好序,从i+1开始依次向前比较,插入到合适位置

private static void InsertionSort(int[] arr) {
for(int i=1;i<arr.length;i++){
int key = arr[i];
int n=i;
while(n>0&&key<arr[n-1]){
arr
= arr[n-1];
n--;
}
arr
=key;
}

}

最好情况:顺序排列 O(n)

最坏情况:逆序排列O(n^2)

平均情况:O(n^2)

冒泡排序:

思想:相邻比较交换,一趟完成最大的上浮

private static void BubbleSort(int[] arr) {
for(int i=0;i<arr.length-1;i++){
boolean flag = true;//如果不设标识,复杂度都为O(n^2)
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 = false;
}
}
if(flag){
return;
}

}
}
最好情况:O(n)因为设置了标识,所以仅进行一次数量为n的比较

最坏情况:O(n^2)

平均情况:O(n^2)




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  排序 算法