插入法排序

    所谓插入排序法,就是检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。

    假设我们输入的是 “5,1,4,2,3” 我们从第二个数字开始,这个数字是1,我们的任务只要看看1有没有正确的位置,我们的做法是和这个数字左边的数字来比,因此我们比较1和5,1比5小,所以我们就交换1和5,原来的排列就变成了“1,5,4,2,3

    接下来,我们看第3个数字有没有在正确的位置。这个数字是4,它的左边数字是5,4比5小,所以我们将4和5交换,排列变成了 “1,4,5,2,3 "我们必须继续看4有没有在正确的位置,4的左边是1,1比4小,4就维持不动了。

/**********************************************************************
 *功能描述:插入法排序
 *输入参数: 数组, 起始索引(0), 终止索引
 *输出参数: 排好序的数组
 *返回值: void
 *其它说明:
 *修改记录1:   //修改历史记录,包括修改日期、版本号、修改人及修改内容等
 *修改日期        版本号              修改人         修改内容
 * --------------------------------------------------------------------------------------------------
 * 20140716         V1.0              wuyq            创建
 ***********************************************************************/
void insertion_sort(int array[], int first, int last)
{
	int i,j;
	int temp;
	for(i=first+1; i<=last; i++)
	{
		temp=array[i];
		j=i-1;
		//与已排序的数逐一比较,大于temp时,该数移后
		while((j>=first)&&(array[j]>temp))
		{
			array[j+1]=array[j];
			j--;
		}
		array[j+1]=temp;
	}
}
/**********************************************************************
 *功能描述:插入法排序
 *输入参数: 数组, 元素个数
 *输出参数: 排好序的数组
 *返回值: void
 *其它说明:
 *修改记录1:   //修改历史记录,包括修改日期、版本号、修改人及修改内容等
 *修改日期        版本号              修改人         修改内容
 * --------------------------------------------------------------------------------------------------
 * 20140716         V1.0              wuyq            创建
 ***********************************************************************/
void insert_sort(int* array, unsigned int n)
{
	int i,j;
	int temp;
	for(i=1;i<n;i++)
	{
		temp=*(array+i);
		for(j=i;j>0&&*(array+j-1)>temp;j--)
		{
			*(array+j)=*(array+j-1);
		}
		*(array+j)=temp;
	}
}

#include <stdio.h>

int main()
{
	int a[8] = {5, 6, 2, 7, 2, 0, 1, 4};
	//insertion_sort(a, 0, 7);
	insert_sort(a, 8);
	int i;
	for(i=0; i<8; i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n");

	return 0;
}
时间: 2024-09-20 14:52:18

插入法排序的相关文章

&amp;#106avascript 的几种排序方法

排序|排序 所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来.其确切定义如下: 输入:n个记录R1,R2,-,Rn,其相应的关键字分别为K1,K2,-,Kn. 输出:Ril,Ri2,-,Rin,使得Ki1≤Ki2≤-≤Kin.(或Ki1≥Ki2≥-≥Kin). 这里,我们简单介绍几种排序方法,直接插入排序.希儿排序.冒泡排序.快速排序.直接选择排序,文中所提及的代码在IE6下测试通过. 直接插入排序基本思想 假设待排序的记录存放在数组R[1..n]中.初始时,R[1]自成

javascript 的几种排序方法

javascript|排序 所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来.其确切定义如下: 输入:n个记录R1,R2,-,Rn,其相应的关键字分别为K1,K2,-,Kn. 输出:Ril,Ri2,-,Rin,使得Ki1≤Ki2≤-≤Kin.(或Ki1≥Ki2≥-≥Kin).     这里,我们简单介绍几种排序方法,直接插入排序.希儿排序.冒泡排序.快速排序.直接选择排序,文中所提及的代码在IE6下测试通过. 直接插入排序基本思想    假设待排序的记录存放在数组R[1.

php中实现冒泡排序、快速排序、选择排序和插入排序等经典算法

// 冒泡排序 function BubbleSort($arr) { // 获得数组总长度 $num = count($arr); // 正向遍历数组 for ($i = 1; $i < $num; $i++) { // 反向遍历 for ($j = $num - 1; $j >= $i ; $j--) { // 相邻两个数比较 if ($arr[$j] < $arr[$j-1]) { // 暂存较小的数 $iTemp = $arr[$j-1]; // 把较大的放前面 $arr[$j-

PHP排序算法(插入,选择,交换,冒泡,快速)

Java代码   <?php   //冒泡排序   function BubbleSort($arr) {       // 获得数组总长度       $num = count($arr);       // 正向遍历数组       for ($i = 1; $i < $num; $i++) {           // 反向遍历           for ($j = $num - 1; $j >= $i ; $j--) {               // 相邻两个数比较    

PHP 各种排序算法实现代码_php技巧

复制代码 代码如下: <?php // 功能: PHP实现各种排序算法 // Author: windlike // Datetime: 2007-06-09 // 冒泡排序 function BubbleSort($arr){ $num = count($arr); for($i=1;$i<$num;$i++){ for($j=$num-1;$j>=$i;$j--){ if($arr[$j]<$arr[$j-1]){ $iTemp = $arr[$j-1]; $arr[$j-1]

《Java程序设计习题精析与实验指导》一3.2 习题解析

3.2 习题解析 一.选择题 1. 以下选项中,合法的赋值语句是______. A. ++m!=n--; B. ++ m; C. m=m + 1= 5; D. m = = 1; 答案:B 解析:在上述四个选项中,选项A和D为逻辑表达式而非赋值语句:选项C中的m+1=5的表示是错误的:选项B中实现的功能等同于m=m+1. 2. 下列语句序列执行后,ch1变量中的值为______. char ch1='A', ch2='B'; if (ch1 + 2 < ch2) ++ch1 ; A. 'A' B.

C语言之插入排序

插入法排序的要领就是每读入一个数立即插入到最终存放的数组中,每次插入都使得该数组有序. 上代码: #include <stdio.h> #include <stdlib.h> #define n 10 int main() { int a[n]={-1,3,6,9,13,22,27,32,49}; /*注意留一个空间给待插数*/ int x,j,k; x = rand()%100; printf("随机产生x的值为:%d\n",x); if(x>a[n-2

排序算法

排序|算法 算法是程序设计的精髓,程序设计的实质就是构造解决问题的算法,将其解释为计算机语言. 在这里您可以了解到: 算法定义 伪代码的使用 算法的复杂性 算法设计策略 常用算法 这里所有的算法都以一种类似Pascal语言的伪代码描述,请参阅伪代码的使用. 新增内容 关于数论的算法--数论基本知识(May 6, 2001)动态规划重新整理 (January 15, 2001)图的深度优先遍历 (January 21, 2001) 图的广度优先遍历 (January 21, 2001)图的拓扑排序

单链表的建立、排序和翻转

链表: 1.注意是否有带头结点. 2.单链表的建立:顺序建表(尾插法).逆序建表(头插法). 3.单链表的插入.删除操作需要寻找前驱结点. 单链表的建立.排序和翻转,都是针对有头结点的单链表. #include <iostream> using namespace std; typedef struct Node { int data; Node * next; }Node,*List; //顺序建表:尾插法 void CreateLinkList(List& L, int n) {