简介

从数组的无序部分位置S元素开始,依次与之前的元素C比较,如果S小于C交换数据,如果S大于C停止此次比较排序,从下一个无序元素继续开始比较交换,依次这样的执行,直至结束。

题目

给定一组数据进行选择排序,以 {4,3,2,1,9,0,5,8}为例。

排序过程

image.png

时间复杂度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];
}

一只鱼
49 声望1 粉丝

« 上一篇
冒泡排序
下一篇 »
计算机组成

引用和评论

0 条评论