排序算法(c实现)------- 插入排序

       插入排序最典型的例子,就是玩扑克牌,每次将新的插入到已排好序的牌中。

       也就是说,插入排序将数据分成两部分,一部分是已排好序的数,另一部分是待插入数据,每次从待插入数据中取出数插入已排好序的数中,具体过程如下:

         ( 1 ) 在已排好序的数据中查找插入位置position

         ( 2 )  移动相对应的数据,以空出position

         ( 3 )  将待插入元素插入位置position

void insert_sort(ElemType array[],int length){
	int inner,outer,i;
	int temp,position;
	if(array == NULL || length == 0)
		exit(-1);
	for(outer = 1; outer < length ;outer++){
		//取出待插入元素
		temp = array[outer];
		//查找插入位置
		for(inner = 0; inner < outer; inner++){
			//如果当前元素比待插入元素大,则找到位置
			if(array[inner] > temp){
				position = inner;
				//相应元素后移
				i = outer;
				while(i > position){
					array[i] = array[i-1];
					i--;
				}
				//将待插入元素插入到position
				array[position] = temp;
				break;
			}
		}
		
	}
}

        其实,插入排序还有另一种思路,即

           ( 1 ) 将待插入元素与已排好序的元素按序比较

           ( 2 ) 如果待插入元素小,则交换当前元素与待插入元素

           ( 3 )  重复执行,直到结束。

        代码如下:

void insert_sort(ElemType array[],int length){
	int inner,outer,median,i;
	int temp,position;
	if(array == NULL || length == 0)
		exit(-1);
	for(outer = 1; outer < length ;outer++){
		
		for(inner = 0; inner < outer; inner++){
			if(array[inner] > array[outer]){
				median = array[inner];
				array[inner] = array[outer];
				array[outer] = median;
			}
		}
		
	}
}


        这个代码是不是比上面的少多了,看起来好像也简单点哦。

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值