JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

【排序】04插入排序(【排序】04插入排序规则)

wys521 2024-11-17 02:51:34 精选教程 13 ℃ 0 评论


1、插入排序法介绍

插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。

2、插入排序法思想

插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。

3、插入排序思路图

4、插入排序法应用实例

把101, 34, 119, 1 请从小到大排序

逐步推导的方式画图理解

第一轮

		// 第一轮{101,34,119,1} ===> {34,101,119,1};
		// 定义待插入的数据
		int insertValue = arr[1];
		int insertIndex = 1-1;        // 即arr[1]的前面位置这个数的下标
		
		// 给insertValue找到插入的位置
		// insertIndex >= 0  保证给insertValue插入位置时,不越界
		// insertValue < arr[insertIndex] 待插入的数,还没有找到适当的位置
		// 就需要将arr[insertIndex]后移
		while(insertIndex >= 0 && insertValue < arr[insertIndex]){    
 			arr[insertIndex+1] = arr[insertIndex];
 			insertIndex--;
		}
		// 当退出while循环的时候,说明插入的位置已经找到,insertIndex+1
		arr[insertIndex+1] = insertValue;
		
		printf("第一轮:\n");
		for(int i=0;i<arr.length;i++){
			print("%d  ", arr[i]);
		}
		printf("\n");

第二轮

		// 第二轮
		// 定义待插入的数据
		insertValue = arr[2];
		insertIndex = 2-1;        // 即arr[2]的前面位置这个数的下标
		
		while(insertIndex >= 0 && insertValue < arr[insertIndex]){    
 			arr[insertIndex+1] = arr[insertIndex];
 			insertIndex--;
		}
		arr[insertIndex+1] = insertValue;
		
		printf("第二轮:\n");
		for(int i=0;i<arr.length;i++){
			printf("%d  ", arr[i]);
		}
		printf("\n");

第三轮

		// 第三轮
		// 定义待插入的数据
		insertValue = arr[3];
		insertIndex = 3-1;        // 即arr[3]的前面位置这个数的下标
		
		while(insertIndex >= 0 && insertValue < arr[insertIndex]){    
 			arr[insertIndex+1] = arr[insertIndex];
 			insertIndex--;
		}
		arr[insertIndex+1] = insertValue;
		
		printf("第三轮:\n");
		for(int i=0;i<arr.length;i++){
			print("%d   \n", arr[i]);
		}
		printf("\n");

最终代码

// 插入排序
void insertSort(vector<int>& nums)
{
	int i, j;
	for (i = 1; i < nums.size(); i++)
	{
		if (nums[i] < nums[i - 1])
		{
			int temp = nums[i];
			for (j = i - 1; j >= 0 && temp < nums[j]; j--)
			{
				nums[j + 1] = nums[j];
			}
			nums[j + 1] = temp;
		}
	}
}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表