直接插入法排序

插入法排序(Insertion Sort)的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。

如:8   2   4    9   3    6 这样一个待排序的序列经过插入法排序的处理后:

第一轮排序后:2   8   4   9   3    6

第二轮排序后:2   4   8   9   3    6

第三轮排序后:2   4   8   9   3    6   

第四轮排序后:2   3   4   8   9    6

第五轮排序后:2   3   4   6   8    9

直接插入法排序是一种稳定的排序方法,适合于原始数据基本有序(正序)的情况。其时间复杂度为O(n2)。对于小规模输入来说,插入排序法是一个快速的排序法。许多复杂的排序法,在规模较小的情况下,都使用插入排序法来进行排序,比如快速排序。

c语言实现的代码:

#include<stdio.h>
void insertionSort(int a[], int n)
{
    //序列中公n个数,所以要进行n-1次插入
    int i, j, key;
    //从序列中的第二个数开始
    for (i = 1; i < n; i++)
    {
        if (a[i] < a[i-1])     //否则无需进行插入操作,因为这两个数的大小关系确定,位置不用变化
        {
            key = a[i];
            j = i-1;
            while (j >= 0 && key < a[j])
            {
                a[j+1] = a[j];
                a[j] = key;
                j--;   //j--后去看下一个数和key的大小情况, 如果满足条件,交换之
            }
        }
    }
}

int main()
{
    int a[7] = {8, 2, 4, 9, 3, 6, 10};
    int i;
    insertionSort(a, 7);
    for (i = 0; i < 7; i++)
        printf("%d\t", a[i]);
    printf("\n");
    return 0;
}





你可能感兴趣的:(数组,C语言,直接插入法排序)