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);
    }

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

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

  • 相关阅读:
    BZOJ5308 ZJOI2018胖
    BZOJ5298 CQOI2018交错序列(动态规划+矩阵快速幂)
    423. Reconstruct Original Digits from English
    422. Valid Word Square
    277. Find the Celebrity
    419. Battleships in a Board
    414. Third Maximum Number
    413. Arithmetic Slices
    412. Fizz Buzz
    285. Inorder Successor in BST
  • 原文地址:https://www.cnblogs.com/qifengle/p/4921313.html
Copyright © 2011-2022 走看看