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

    插入排序:

    版本一:

    #include <stdio.h>

    //实现元素数为7的整型数组的元素由小到大排列
    void Insertion_Sort(int A[])
    {
    for (int j = 1; j < 7; j++)
    {
    int key = A[j];
    int i = j - 1;
    while (i >= 0)
    {
    if (A[i] > key)
    {
    A[i + 1] = A[i];
    i--;
    }
    }
    A[i + 1] = key;
    }
    for (int i = 0; i < 7; i++)
    {
    printf("%d\n", A[i]);
    }
    }
    void main()
    {
    int A[] = { 2, 3, 5, 6, 1, 7, 9 };
    Insertion_Sort(A);
    }

    但是结果是输出不了结果,然后使用visual studio上面的debug功能,发现程序始终没用进入if程序段里面,才发现原来是由于2>3不成立,所以程序始终没有进入if语句段,所以导致i--无法执行,出现死循环。

    经过改正,将程序修改如下:

    #include <stdio.h>

    //实现元素数为7的整型数组的元素由小到大排列
    void Insertion_Sort(int A[])
    {
    for (int j = 1; j < 7; j++)
    {
    int key = A[j];
    int i = j - 1;
    while (i >= 0)
    {
    if (A[i] > key)
    A[i + 1] = A[i];
    i--;
    }
    A[i + 1] = key;
    }
    for (int i = 0; i < 7; i++)
    {
    printf("%d\n", A[i]);
    }
    }
    void main()
    {
    int A[] = { 3, 2, 5, 6, 1, 7, 9 };
    Insertion_Sort(A);
    }

    结果输出的结果为:9,6,3,5,6,7,9,发现没有实现程序由小到大的排序功能。经过分析,是因为即使当A[i]<=key时,i--依旧执行,所以与本意不符合。

    然后将程序改为:

    #include <stdio.h>
    void Insertion_Sort(int A[])
    {
    for (int j = 1; j < 7; j++)
    {
    int key = A[j];
    int i = j - 1;
    while ((i >= 0) && (A[i]>key))
    {


    A[i + 1] = A[i];
    i--;

    }
    A[i + 1] = key;
    }
    for (int i = 0; i < 7; i++)
    {
    printf("%d\n", A[i]);
    }
    }
    void main()
    {
    int A[] = { 3, 2, 5, 6, 1, 7, 9 };
    Insertion_Sort(A);
    }

    然后就能得到正确的结果。

    事实证明,理解了算法的思想与成功实现之间还是存在一定距离的,需要不断地练习才能避免一些比较浅显的错误。

  • 相关阅读:
    memcached启动参数
    Shell 获取当前执行脚本的路径
    linux 下 openssl 编译和交叉编译
    网站更换域名
    linux访问windows共享文件夹
    linux下安装NPM管理工具
    快速构建C++项目工具Scons,结合Editplus搭建开发环境
    C++ Config 配置文件类
    iOS代码Button Demo
    (转)iOS面试题目
  • 原文地址:https://www.cnblogs.com/qifengle/p/4921313.html
Copyright © 2011-2022 走看看