简介
从数组的无序部分位置S元素开始,依次与之前的元素C比较,如果S小于C交换数据,如果S大于C停止此次比较排序,从下一个无序元素继续开始比较交换,依次这样的执行,直至结束。
题目
给定一组数据进行选择排序,以 {4,3,2,1,9,0,5,8}为例。
排序过程
时间复杂度O(N²)分析
第一次排序,比较1次;
第二次排序,最坏比较2次;
..............
最后一次排序,最坏比较N-1次;
比较次数=1+2+...+(N-1)=(1 + N-1) * (N-1)/2=N²/2 + N/2
所以时间复杂度为:O(N²)
代码
public void insertionSort(int[] arr) {
if(arr == null || arr.length < 2) {
return;
}
for(int i = 0, len = arr.length - 1; i < len; i++) {
int temp = arr[i + 1];
for(int j = i; j >= 0; j--) {
if(temp < arr[j]) {
swap(arr, j, j+1);
}
}
}
}
public void swap(int[] arr, int i, int j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。