插入排序

来源:互联网 发布:flash cs3 mac 中文 编辑:程序博客网 时间:2024/05/28 23:12

有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,这样一直将所有的数进行排序。

1.插入排序, 从第二个数开始,先将第二个数做一个副本放在一旁(变量中)。

2.第二个数同前一个数比较,小于则用前一个数覆盖第二个数, 然后将副本放在前一个数前面

3.再将第三个数做一个副本取出,第三个数同前一个数比较,小于则用前一个数覆盖第三个数(此时第二个数位置空闲), 然后用副本同前一个数的前一个数比较,如果小于,则用前一个数的前一个数覆盖在原本的第二个位置上(此时第一个位置空闲), 将副本放入即可。

4.将数组中接下来的数依次做与3类似步骤,以3类推将副本往前作比较。直到副本不小于比较的数则该轮插入结束

5.重复4步骤,直到最后一个数


#include <stdio.h>#include <time.h>#include <stdlib.h>void InsertSort(int *pnArr, int nLen){    if (pnArr == NULL || nLen == 0)    {        return;    }    for (int i = 1; i < nLen; i++)    {        int nTmp = pnArr[i];int j;        for (j = i; j > 0 && nTmp < pnArr[j - 1]; j--)        {            pnArr[j] = pnArr[j-1];//移位与下面的数据进行比较,从前面的进行排序,将改地址的值,将该值放到该放的位置        }        pnArr[j] = nTmp;//一边循环一边排序,将ntmp放到大于某个数的位置    }}void PrintArr(int *pnArr, int nLen){    for (int i = 0; i < nLen; i++)    {        printf("%d ", pnArr[i]);    }    printf("\n");}int main(){    srand(time(NULL));    int nArr[10];    for (int i = 0; i < 10; i++)    {        nArr[i] = rand()%100;    }        printf("排序前:");    PrintArr(nArr, 10);        InsertSort(nArr, 10);    printf("排序后:");    PrintArr(nArr, 10);system("pause");    return 0;}


0 0
原创粉丝点击