直接插入排序

算法简介:

插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。

算法实现步骤:

//插入排序算法实现思路:(以从小到大排序为例)
// 第一步:得到一个无序数组
//第二步:确定一个有序列表,一般默认为a[1]为第一个有序列表(a[0]作为监视哨),同时将有序列表中最右一个元素的后一位放入监视哨中。
//第三步 :将监视哨中的数据与现有的有数列表中的从左至右数据依次比较,并将大数后移。
//第四步:找到一个数a[j],使得a[j]
//第五步: 将监视哨的数据插入到指定位置
//第六步: 判断无序列表中是否还有数据有则跳到第二步,无则结束函数。

算法代码:

第一个算法:

//排序算法
void sort(int *a,int n){
	for(int i=2;i<=n;i++){
		a[0]=a[i];	   		   //将数组中的坐标为i的数放入监视哨中
		int j=i-1;				//指向有序列表的最后一个元素
		while(a[0]<a[j]&&j>0){	 //	按从小到大排列
			a[j+1]=a[j];		  //大数后移
			j--;				  //指想前一个数据
		}
		/*	for(int j=i-1;a[0]<a[j]&&j>0;j--){	   //等效于上面while段代码
		a[j+1]=a[j];
		}*/

		a[j+1]=a[0];		   //将监视哨中的数据插入到指定的位置
	}
}

  第二个算法:

void InsertSortArray(int arr[] , int n) 
{
	int j;
	for(int i=2;i<n;i++)//循环从第三个数组元素开始,因为arr[0]作为哨兵,以省略对边界的判断 
		if(arr[i]<arr[i-1])
		{
			arr[0]=arr[i];//复制哨兵
			arr[i]=arr[i-1];
			for(j=i-2;arr[0]<arr[j];j--)
				arr[j+1]=arr[j];
			arr[j+1]=arr[0];
		}
} 

  

posted @ 2014-03-29 00:07  这夏  阅读(167)  评论(0)    收藏  举报