捐助郴维网
感谢您对郴维网的支持,你的支持将是郴维网持续发展的动力!
二维码
×
当前位置:郴维网 >查找和排序 > 正文
17 2024.01

排序算法2 - 直接插入排序

点击次数:16 更新时间:2024/1/17 20:59:29  【打印此页

什么是直接插入排序算法?

  直接插入排序算法(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增加1的有序表。

 

解析:

  划重点 必须是排好序的有序表,插入数据后得到一个新的、记录数增加1的有序表。

  什么是有序表,无序表?如图:

  

  代码实现 把6插入到数组{ 1, 2, 3, 4, 5, 7, 8, 9, 10 }中,实现方法可以从前面开始遍历数组,找到合适的位置然后插入,

  也可以从后面开始遍历数组,找到合适的位置然后插入(前提是数组大小能容纳插入后的数据), 现假设数组够大,然后使用

  "0"来表示空元素。

  

  

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	int arr[10] = { 1, 2, 3, 4, 5, 7, 8, 9, 10, 0}; // 0表示空
	int num = 6, i;
	
	// 插入前
	for(i=0; i<10; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");

	// 从后面遍历寻找位置,并把数据进行移位
	for(i=9; arr[i]>num || arr[i]==0; i--) // 0表示空
	{
		arr[i] = arr[i-1]; // 把前面的数据后移
	}
	arr[i+1] = num; // 找到位置,把数据插入


	// 插入后
	for(i=0; i<10; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");

	return 0;
}

 

  如果现有数组 arr[10] = {5, 2, 6, 1, 3, 9, 10, 7, 4, 8}; 使用直接插入排序怎么实现呢?

  解决2个前提 1. 有序表,2. 待插入的数据。

  第1步:把数组的第0个元素看做一个有序表 {5}, 第1个元素看做待插入数据 2 ,插入后数组arr[10] = {2, 5, 6, 1, 3, 9, 10, 7, 4, 8};

  第2步:把数组的前2个元素看做一个有序表 {2,5}, 第2个元素看做待插入数据 6 ,插入后数组arr[10] = {2, 5, 6, 1, 3, 9, 10, 7, 4, 8};

  第n步...... 如图:

  

  动图:

  

  代码:

#include <stdio.h>

void InsertSort(int k[], int n)
{
	int i, j, temp;

	for( i=1; i<n; i++ )
	{
		if( k[i-1]>k[i] )
		{
			temp = k[i];
			for( j=i-1; k[j]>temp; j--)
			{
				k[j+1] = k[j];
			}

			k[j+1] = temp;
		}
	}
}


int main()
{
	int i, a[10] = {5,2,6,1,3,9,10,7,4,8};

	InsertSort(a, 10);

	printf("排序后的结果是:");
	for(i=0; i<10; i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n");

	return 0;
}
提示
郴维网为您提供各类专业服务:
软件开发,电脑配件销售,WIFI路由器销售,上门电脑维修,上门安装系统,系统安装,软、硬件安装,电脑除尘清灰,显示器维修,WIFI安装调试,服务器维护,数据恢复,密码破解,网络布线,网络检修,打印机维修,打印机加碳粉,苹果电脑安装系统,苹果电脑安装双系统,监控安装维护,电脑外包,笔记本电脑维修,餐饮、美容行业软件安装 等。。。。。。
点击次数:16 更新时间:2024/1/17 20:59:29  【打印此页
关键词推荐:郴州电脑城 郴州电脑维修公司 维修电脑公司 郴州软件开发 上门电脑维修 上门安装系统 笔记本电脑维修 郴州打印机维修 打印机加碳粉 电脑安装双系统 苹果电脑双系统 液晶显示器维修 联想笔记本维修 联想笔记本维修电话 戴尔笔记本维修电话 郴州戴尔笔记本维修 戴尔笔记本郴州维修点 华硕笔记本维修点 郴州华硕笔记本维修 郴州笔记本上网维修