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

    插入排序

    618买了本算法导论,考完试10号,旅游完回来15号,又出去聚会了两天,终于开始学习了= =
    第一个算法就是这个插入排序,道理很简单,后一个数和前一个数比较大小,交换顺序,最终按大小排好顺序。下面放一张原理图:
    插入排序模拟图
    上图中还给出了伪代码,然后我稍作修改,用c写出了这个程序:

    #include<stdio.h>
    void InsertionSort(int []);
    int main()
    {
    	int a[5], i;
    	for(i = 0; i < 5; i++)
    	{
    		scanf("%d", &a[i]);
    	}
    	InsertionSort(a);
    	for(i = 0; i < 5; i++)
    	{
    		printf("%d ", a[i]);
    	}
    	printf("
    ");
    	return 0;
    }
    
    void InsertionSort(int num[])
    {
    	int j, k, key;
    	for(j = 1; j < 5; j++)
    	{
    		key = num[j];
    		k = j - 1;
    		while(k >= 0 && num[k] > key)
    		{
    			num[k + 1] = num[k];
    			k = k - 1;
    		}
    		num[k + 1] = key;
    	}
    }
    

    测试结果如下:
    插入排序测试结果
    在代码的第26行,把 num[k] > key 改成 num[k] < key 就能实现降序排序。
    再说一下循环不变式,它的三个性质:初始化、保持、终止,可以帮助判断算法的正确与否。
    循环不变式三性质
    保持这一性质是判断算法是否正确很关键一点,要保证每次迭代时 A[j] 之前的数已经排好序。
    这个插入排序还是挺简单的,容易理解而且代码量少,后面就要学分析算法,看的一脸懵逼。这本书估计大四都学不完了orz
    争取3天更一次博

  • 相关阅读:
    20180530
    vue路由配置出错,导致页面跳转会有闪屏问题
    20180528
    vuecli+ivew项目搭建
    centos6安装mysql
    华为云服务ESC
    centos6安装nginx
    国产操作系统aarch64编译filebeat
    Python常见问题
    Git
  • 原文地址:https://www.cnblogs.com/Jay-Auditore/p/13344536.html
Copyright © 2011-2022 走看看