3.插入排序

加入我还是想从小到大排序。

有一个数组,我先找到第一个不按顺序排列的数字,接下来就是想办法把它插入到合适的位置。

方法就是把这个数字和它前面的数字比大小。如果它比前面的数字小,那么前面的数字向后移动,直到遇到一个数字,比这个特殊数字还要小,插入就完成了。

要注意特殊情况是如果这个特殊数字比这个数列的第一个数字还要小,由于前面没有可以比较的数字,所以要结束比较。

#include<stdio.h>
void insert(int arr[], int n)
{
    int key = arr[n];
    int i = n;
    while (arr[i - 1] > key)
    {
        arr[i] = arr[i - 1];
        i--;
        if (i == 0)
        {
            break;//break的作用是跳出最近一层的循环
        }
    }

    arr[i] = key;//当某个位置,它的前一个位置上的数字比特殊的数字小的时候,这个位置就是我们要插入的位置
}
void insertSort(int arr[], int n)
{
    int i;
    for (i = 1; i < n; i++)
    {
        insert(arr, i);//它相当于把从第二个数字开始的数字都当成特殊数字插入到合适的位置
    }
}
int main()
{
    int arr[] = { 9,1,2,3,6,5,7,8,4 };
    int i;
    insertSort(arr, 9);
    for (i = 0; i < 9; i++)
    {
        printf("%d\n", arr[i]);
    }
    return 0;
}

 

posted on 2020-08-15 02:44  Selina_Xie  阅读(124)  评论(0)    收藏  举报