插入排序

来源:互联网 发布:推荐一本c语言入门的书 编辑:程序博客网 时间:2024/06/14 02:58

插入排序可见于生活
这里写图片描述
有如上图所示的扑克牌,我们要将牌从左至右,从小到大排序,以方便我们进行游戏。
步骤:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
以此类推,就可以将所有的牌按顺序排序了。


插入排序伪代码
INSERTION-SORT(Arr):
1 for j = 0 to Arr.length-1
2     i = j-1
3     key = Arr[j]
4     while i>=0 && Arr[i] > key
5         Arr[i+1] = Arr[i]
6         i = i - 1
7     Arr[i+1] = key


兑现JAVA代码

import java.util.Arrays;public class InsertSort {    public static void main(String[] args) {        int[] arr = {5,2,4,6,1,3};        arr = insertSort(arr);        System.out.println(Arrays.toString(arr));    }    public static int[] insertSort(int[] arr){        for(int j=1;j<arr.length;j++){            int i = j-1;            int key = arr[j];            while(i>=0&&arr[i]>key){//此循环内将大于key的元素向后移动                arr[i+1] = arr[i];                i = i-1;            }            arr[i+1] = key;        }        return arr;    }}

分析算法:

给出每条语句执行时间和执行次数。对于j=0,1,2,……,n-1,其中n=Arr.length,假设tj表示对那个值j第4行执行while循环测试的次数。当一个for或while循环按通常的方式退出时,执行测试的次数比执行循环体的次数多1.

Code 代价 次数 1 for j = 0 to Arr.length-1 c1 n 2     i = j-1 c2 n-1 3     key = Arr[j] c3 n-1 4     while i>=0 && Arr[i] > key c4
j=0n1tj
5         Arr[i+1] = Arr[i] c5
j=0n1tj1
6         i = i - 1 c6
j=0n1tj1
7     Arr[i+1] = key c7 n-1

T(n)=c1n+c2(n1)+c3(n1)+c4n1j=0tj+c5n1j=0tj1+c6n1j=0tj1+c7(n1)
最坏运行情况:
n1j=0tj=n(n1)21
n1j=0tj1=n(n3)2
T(n)=c1n+c2(n1)+c3(n1)+c4(n(n1)21)+c5(n(n3)2)+c6(n(n3)2)+c7(n1)=an2+bn+c
所以,插入排序的最坏情况运行时间为θ(n2).

原创粉丝点击