直接插入排序法---排序算法(一)

1.排序原理

从小到大排序

从第二个数开始比较,将其与前一个数比较,如果小于前一个数,则插入,使其前面数是从小到大排列

例如 数组为:38 65 97 76 13 27 49

i=2   65>38,所以不要动 

i=3   97>65,所以不要动

i=4  76<97, 所以要将76插入到65到97之间 ,为 38 65  76  97  13 27 49

i=5  13<97,所以要将13插入到38之前,使其从小到大排列 为  1338  65  76  97   27 49

i=6   27<97,所以要将27插入到13与38之间,使其从小到大排列 为  13 27  38  65  76  97   49

i=6   49<97,所以要将49插入到38与65之间,使其从小到大排列 为  13 27  38   49  65  76  97  

排序结束

2.代码

#include <stdio.h>
//打印数组
void printArray(int a[],int size){
	printf("数组为:[%d] ",a[0]);
	for (int i=1;i<size;i++)
	{
		printf(" %d ",a[i]);
	}
	printf("
");
}

void main(){
	//a[0]为监视哨
	int a[8]={0,38,65,97,76,13,27,49};

	for (int i=2;i<=7;i++)
	{
		printf(" i=%d  ",i);
		printArray(a,8);
		if(a[i]<a[i-1]){
			a[0]=a[i];
			a[i]=a[i-1];
			for (int j=i-2;a[0]<a[j];j--)
			{
				a[j+1]=a[j];
			}
			a[j+1]=a[0];
		}
	}
	printf("结果 ");
	printArray(a,8);
}


3.结果

从小到大

 i=2  数组为:[0]  38  65  97  76  13  27  49
 i=3  数组为:[0]  38  65  97  76  13  27  49
 i=4  数组为:[0]  38  65  97  76  13  27  49
 i=5  数组为:[76]  38  65  76  97  13  27  49
 i=6  数组为:[13]  13  38  65  76  97  27  49
 i=7  数组为:[27]  13  27  38  65  76  97  49
结果 数组为:[49]  13  27  38  49  65  76  97

从大到小

 i=2  数组为:[0]  38  65  97  76  13  27  49
 i=3  数组为:[65]  65  38  97  76  13  27  49
 i=4  数组为:[97]  97  65  38  76  13  27  49
 i=5  数组为:[76]  97  76  65  38  13  27  49
 i=6  数组为:[76]  97  76  65  38  13  27  49
 i=7  数组为:[27]  97  76  65  38  27  13  49
结果 数组为:[49]  97  76  65  49  38  27  13



原文地址:https://www.cnblogs.com/whzhaochao/p/5023477.html