C语言 直接插入排序(附源代码)

插入排序思想:默认初始数组下标为0的数字为有序序列,每次从后续数组中顺序拿一个数字,将这个数字放到前面的有序序列中,放的位置要确保放完之后依旧是有序的。

举例说明

初始乱序数组    int a[10]={6,2,4,7,5,8,9,10,3,1}

默认有序序列为6           2 ,4, 7, 5, 8, 9, 10, 3, 1

从后面拿一个数字2

由于2比6小,所有放6前边

2, 6           4, 7, 5, 8, 9, 10, 3, 1

从后面拿一个4

由于4比2大,4不和2交换,再判断4和6的大小,4小于6,4和6交换

2, 4, 6         7, 5, 8, 9, 10, 3, 1

从后面拿一个7

7和2比,不交换  

7和4比,不交换

7和6比,不交换 

2, 4, 6 ,7        5, 8, 9, 10, 3, 1

从后面拿一个5

5和2比 不交换

5和4比 不交换

5和6比 交换

2, 4, 5, 7      6, 8, 9, 10, 3 ,1

6和7比 交换

2, 4, 5,6, 7       8, 9, 10, 3 ,1

以此类推

 

源代码如下

#include
void insertsort(int* p);
int main()
{
    int a[10]={6,2,4,7,5,8,9,10,3,1};
    
    insertsort(a);
    
    for(int i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    
    return 0;
}

void insertsort(int* p)
{
    int temp;
    
    for(int i=1;i<10;i++)//默认第一个数是有序序列,因此只需要循环n-1次
    {
        for(int j=0;j         {
            if(*(p+i)<*(p+j))
            {
                temp=*(p+i);
                *(p+i)=*(p+j);
                *(p+j)=temp;
            }
        }
    }
}

你可能感兴趣的:(算法笔记)