C语言-插入排序 (数据结构)

“插入排序法” 基本原理 

        从将要排序的对象中每次选择一个值,按照非递减(从小到大)(或非递增(从大到小))顺序与前面已经排好顺序的数比较,然后将数字插入到合适位置处。之后每次选择一个未排序的数字与前面已排序的数字进行比较,再插入适当位置,以此类推,直至排序完成。

        如下所示:

   排序前:92 77 67 8 6 84 55 85 43 67

第1步:[77 92] 67 8 6 84 55 85 43 67 将77插入92前

第2步:[67 77 92] 8 6 84 55 85 43 67 将67插入77前

第3步:[8 67 77 92] 6 84 55 85 43 67 将8插入67前

第4步:[6 8 67 77 92] 84 55 85 43 67 将6插入8前

第5步:[6 8 67 77 84 92] 55 85 43 67 将84插入92前

第6步:[6 8 55 67 77 84 92] 85 43 67 将55插入67前

第7步:[6 8 55 67 77 84 85 92] 43 67 将85插入92前

第8步:[6 8 43 55 67 77 84 85 92] 67 将43插入55前

第9步:[6 8 43 55 67 67 77 84 85 92] 将67插入67前

代码实现

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10

void insort(int number[]){ 
	int i, j, k, tmp;
	for(j = 1; j < MAX; j++){ 
		tmp = number[j];
		i = j - 1;
		while(tmp < number[i]){ 
			number[i+1] = number[i]; 
			i--;
			if(i == -1){
				break;	
			}		
		}
		number[i+1] = tmp;
		printf("第 %d 次排序:", j); 
		for(k = 0; k < MAX; k++){
			printf("%d ", number[k]);
		}
		printf("\n");
	}
}

int main(){
	int number[MAX] = {0}; 
	int i;
	srand(time(NULL)); //刷新每次产生的随机数,若无此句,每次随机数相同,亲自尝试一下便知
	printf("\n插入排序:\n\n");
	printf("排序前:");
	for(i = 0; i < MAX; i++){ 
		number[i] = rand() % 100; //产生0-99的随机数,这里没有采用固定的数组值进行排序,随机生成
		printf("%d ", number[i]);
	}
	printf("\n\n");
	insort(number);
	return 0;
}

运行结果

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等日出看彩虹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值