zoukankan      html  css  js  c++  java
  • 插入排序

    插入排序的原理同很多人打牌时,整理手中的牌时的做法差不多。在开始摸牌时,左手是空的,接着一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上,这样左手的牌永远都是顺序摆放的。
    插入排序伪代码如下:

    INSERT-SORT(A)
        for j <-- 2 to length[A]
            do key <-- A[j]
               > Insert A[j] into the sorted sequence A[1..j-1].
               i <-- j - 1
            while i > 0 and A[i] > key
                do A[i+1] <-- A[i]
                   i <-- i - 1
            A[i+1] <-- key


    根据伪代码很容易写出c代码:

    void insert_sort(int a[], int len)
    {
            int i, j;
            int key;
    
            for (j = 1; j < len; j++) {
                    key = a[j];
    
                    i = j - 1;
                    while (i >= 0 && a[i] > key) {
                            a[i+1] = a[i];
                            i--;
                    }
    
                    a[i+1] = key;
            }
    }


    完整代码如下:

    #include <stdio.h>
    
    void dump(int a[], int len)
    {
    	int i;
    
    	for (i = 0; i < len; i++) {
    		printf("%3d", a[i]);
    	}
    	printf("
    ");
    }
    
    void insert_sort(int a[], int len)
    {
    	int i, j;
    	int key;
    
    	for (j = 1; j < len; j++) {
    		key = a[j];
    
    		i = j - 1;
    		while (i >= 0 && a[i] > key) {
    			a[i+1] = a[i];
    			i--;
    		}
    
    		a[i+1] = key;
    	}
    }
    
    int main(void)
    {
    	int a[] = {3, 1, 0, 4, 6, 2, 9, 8, 7, 5};
    
    	int len = sizeof(a) / sizeof(a[0]);
    
    	dump(a, len);
    
    	insert_sort(a, len);
    
    	dump(a, len);
    
    	return 0;
    }


    程序运行结果为:

      3  1  0  4  6  2  9  8  7  5
      0  1  2  3  4  5  6  7  8  9

  • 相关阅读:
    office2010卸载出现安装程序包的语言不支持
    Red Hat 7.5 Yum Replacement
    0801作业
    0730会员注册
    0730作业2:随机生成6位的字符串验证码,要求包含数字、大小写字母
    0730作业一练习:输出学习阶段目标
    0727作业1 根据学员英文名找到学员对象
    注册
    随机数
    Map
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3271034.html
Copyright © 2011-2022 走看看