您的位置:首页 > 其它

【排序算法】直接插入排序

2016-03-02 12:23 330 查看
数据结构课程中的好多排序算法都已经学过了,但过了一年还是忘了好多,仅仅只会冒泡,选择,所以最近计划把其他排序算法也好好温习巩固一下!!!

直接插入排序:

假设待排序的元素存放在数组R[0...n-1]中,排序过程中的某一时刻,R被划分成两个子区间R[0...i-1]和R[i...n-1](刚开始时i = 1,有序区只有R[0]一个元素),其中,前一个子区间是已经排好序的有序区,后一个区间则是当前未排序的部分,不放称其为无序区

直接插入排序的一趟操作是将当前无序区的开头元素R[i](1<=i<n-1)插到有序区R[0...i-1]中的适当位置上,使R[0...i]变为新的有序区。这样使得每趟操作使有序区增加一个元素,这叫做增量法

C语言的代码如下:

#include<stdio.h>

/**
快速排序:
1.将初始序列R
分为2部分:R[0],R[1,N-1];
2.从R[1,N-1]选取第一个元素,加入到R[0]中的合适位置中,使其R[0...1]为有序序列;
3.重复上述步骤

注意问题:经过每一趟的循环,有的元素会改变位置,向有序序列插入时,无序序列和有序序列元素位置都会
				  改变,因为需要将目标元素合适位置的后面的元素后移
*/
void insertSort(int a[],int n){
	int i,j;
	int temp;
	for(i = 1;i<n;i++){
		temp = a[i];
	/*如果temp小于当前已经排序好的集合的最大的一个元素,则表示最大的依次后移,
	并把a[i]覆盖掉,这就是为啥要定义一个temp的原因
	*/
	for(j=  i-1;j>=0&&temp<a[j];j--){
			a[j+1] = a[j]; 
	}
	a[j+1] = temp ;
	}
}

int main(){
	int a[7] ={6,5,10,18,25,4,1};
	insertSort(a,7);
	for(int i = 0;i<7;i++){
		printf( " %d ",a[i]);
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: