选择排序与插入排序
Posted 不做油腻的中年大叔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择排序与插入排序相关的知识,希望对你有一定的参考价值。
选择排序
一、思想
遍历一次数组,从数组中找到最小的那个,放在0位置(与其交换)
再遍历一次数组,从数组中找到次小的那个,放在1位置
直到整体有序
二、代码
public static void selectionSort(int[] arr){
if(arr == null || arr.length < 2){
return;
}
for(int i = 0; i < arr.length; i++){
int min = i;//从每次遍历的第一个开始
for(int j = i; j < arr.length; j++){
//实现做到稳定
min = (arr[min] > arr[j]) ? j : min;
}
Util.swap(arr, min , i);
}
}
三、复杂度
实现可以做到稳定性,时间上严格O(n^2),空间上O(n)
插入排序
一、思想
将数组中的一个元素挨个插入到其前面有序的序列中
二、代码
public static void insertSort(int[] arr){
if(arr == null || arr.length < 2){
return;
}
for(int i = 1; i < arr.length; i++){
for(int j = i; j > 0; j--){
if(arr[j - 1] < arr[j]){//前面部分是有序的
break;
}
Util.swap(arr, j ,j-1);
}
}
}
三、复杂度
实现可以做到稳定性,空间O(1),但在时间复杂度上与冒泡和选择排序不同,如果情况不同:
待排序数组为[1, 2, 3, 4, 5],时间复杂度为O(n)
待排序数组为[5, 4, 3, 2, 1],时间复杂度为O(n^2)
以上是关于选择排序与插入排序的主要内容,如果未能解决你的问题,请参考以下文章