插入排序

插入排序是简单的排序算法,以下是这个算法的原理,步骤,实现等。

假设待排序数组为 L = { L 0 , L 1 , L 2 , . . . , L i − 1 , L i . . . L n } L=\{ L_0, L_1 , L_2 , ... , L_{i-1} , L_i ...L_n\} L={L0,L1,L2,...,Li1,Li...Ln} 其中参与排序的第一个元素是 L 1 L_1 L1。元素 L 0 L_0 L0不参与排序。

排序目标是将数组 L L L按照递增顺序排列。

  • 插入排序原理:

D e f : Def: Def:(一趟插入排序):假设数组的前 i − 1 i-1 i1 个元素已经按照递增顺序排序,那么将第 i i i 个元素按照递增顺序插入到前 i − 1 i-1 i1 个元素的数组指定位置,组成一个按递增顺序排列含有 i i i 个元素的数组。这个过程称为一趟插入排序

插入排序想法:假设数组的第一个元素是排好序的。从第二个元素开始到最后一个元素结束,做 n − 1 n-1 n1次 “一趟插入排序”。则将待排序数组排序完成。

  • 排序步骤:

i n d e x = 2... n index=2...n index=2...n做循环:
         \,\,\,\,\,\,\,\, [ L 1 , . . . , L i n d e x ] \left[ L_1,...,L_{index} \right ] [L1,...,Lindex] 做 “一趟插入排序”。

  • 算法实现:

第一种

void insertsort_1 (int* list,int len){
	int b,t,pos;	
	for (b=2;b<=len;b++){
		for (t=b;t>=1;t--){
			if (list[t]

第二种用 L 0 L_0 L0做交换变量。

void insertsort_2(int *list,int len){
	int b,t;
	for (b=2;b<=len;b++){
		
		if (list[b]=1;t--){
				if (list[t]>list[0])
					list[t+1]=list[t];	
				else
					break;
			}
			list[t+1]=list[0];
			
			
		}
	}
}


下面是测试代码:

#include 

void printarry(int *list,int len){
	for (int i=0;i<=len;i++)
		printf("%d-",list[i]);
	printf("\n");
}

// 排序函数定义...

//主函数
int main(){
	int anarry[12]={0,2,3,1,6,5,4};
	printarry(anarry,6);
	insertsort_2(anarry,6);
	printarry(anarry,6);
	
}

你可能感兴趣的:(插入排序)