插入排序

/**
 *插入排序
 *算法步骤:
 *1、将第一个待排序的序列的第一个元素看做是一个有序序列
 *2、把第二个元素到最后一个元素当成为排序序列
 *3、从头到尾扫描未排序的序列
 *4、将扫描到的每个元素插入有序序列的恰当位置
 *
 *命题:对于随机排列的长度为N且主键不重复的数组,平均情况下插入排序需要~N^2/4次
 *比较以及~N^2/4次交换。最坏情况下需要~N^2/2次比较和~N^2/2次交换,最好情况下需
 *要N-1次比较和0次交换。
 *
 *插入排序对非随机数组(已经有序或接近有序)很有效。
 **/

#include <stdio.h>

void insertion_sort(int *a, int size);
void print_array(int *a, int size);
void swap(int *a, int *b);

int main(){
	int array[] = {33,2,35,3,43,76,54,545,43,4,11,232};
	int length = sizeof array / sizeof array[0];

	puts("before sort:");
	print_array(array, length);

	insertion_sort(array, length);
	puts("After sort:");
	print_array(array, length);
	return 0;
}

void insertion_sort(int *array, int size){
	int i, j;

	for(i = 1; i < size; ++i){
		for(j = i; j > 0 && array[j] < array[j-1]; --j)
			swap(&array[j], &array[j-1]);
	}
}

void swap(int *a, int *b){
	int temp = *a;
	*a = *b;
	*b = temp;
}

void print_array(int *a, int size){
	int i;
	for(i = 0; i < size; ++i)
		printf("%d ", *(a+i));
	putchar('\n');
}

 

转载于:https://www.cnblogs.com/mocuishle/p/8006248.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值