int min = arr[minIndex];
for(int j = 1 + i;j<arr.length;j++){
if(min > arr[j]){
min = arr[j];
minIndex = j;
}
}
arr[minIndex] = arr[i];
arr[i] = min;
}
}
4、速度测试
选择排序:120000数据,4秒
![](https://img-blog.csdnimg.cn/20200523091411841.png)
### (三)插入排序
1、基本思想
把n个待排序的元素第一位看成有序表,其它的看成无序表,排序过程中,每次从无序表中取出一个数,依次与有序表中的数进行比较,插入到合适的位置。
2、动态效果图
![](https://img-blog.csdnimg.cn/2020052200155496.gif)
3、代码实现
//插入排序
public static void insertSort(int[] arr ){
int insertVal = 0;
int insertIndex = 0;
for (int i = 1; i < arr.length; i++) {
//定义待插入的数
insertVal = arr[i];
// 即arr[i]的前面这个数的下标
insertIndex = i - 1;
// 给insertVal 找到插入的位置
// 说明
// 1. insertIndex >= 0 保证在给insertVal 找插入位置,不越界
// 2. insertVal < arr[insertIndex] 待插入的数,还没有找到插入位置
// 3. 就需要将 arr[insertIndex] 后移
while(insertIndex >= 0 && insertVal < arr[insertIndex]){
arr[insertIndex+1] = arr[insertIndex];
insertIndex--;
}
// 当退出while循环时,说明插入的位置找到, insertIndex + 1
if(insertIndex + 1 != i){
arr[insertIndex+1] = insertVal;
}
}
}
4、速度测试
插入排序:120000数据,1秒
![](https://img-blog.csdnimg.cn/20200523091529335.png)
### (四)希尔排序
1、基本思想
希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法也是冲破O(n²)的第一批算法之一。它与插入排序的不同之处在于,它会优先比较较远的元素。
2、效果图
![](https://img-blog.csdnimg.cn/20200523135326850.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_