插入排序

经常用sort() 结果排序真不太会写了。来复习复习. 先贴个直接插入排序的代码

void insertSort(int *a, int n ) {
	// 直接插入排序  
	int tmp ; 
	for(int i = 1 ;i<n ;i++ ) {
		int tmp = a[i] ; 
		int j = i-1 ; 
		while(j >= 0 && a[j] >tmp) {
			a[j+1] = a[j] ; 
			j-- ; 
		}
		a[j+1] = tmp ; 
	}
	
}

举个例子吧 !

QQ图片20191104203231.png

一开始是这样的 。

i 一开始指向的是数组的第二的元素,然后从后往前扫描,我们把数组分成下面的样子。

QQ图片20191104205002.png

目前有序区只有5,无序区有5个。

执行一次的时候,发现,有比 i 所指向的元素要大的,就交换.所以下一次 2和5顺序会交换。 QQ图片20191104210220.png 现在有序区就有两个了。后面的过程也都一样。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×