• 插入排序算法


    插入排序

    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天更一次博

  • 相关阅读:
    c# webapi无法获取Session值问题解决
    深入理解java虚拟机之自动内存管理机制笔记
    数据结构总结1
    疯人院之语言、编码、计算机

    集线器/交换机
    什么是DOM?DOM和JavaScript的关系 [web开发]
    JSON轻量级的数据交换格式
    天问宇宙学第一课
    C++基础知识
  • 原文地址:https://www.cnblogs.com/Jay-Auditore/p/13344536.html
Copyright © 2020-2023  润新知