【游戏算法】编码实现直接插入排序

9010

参考答案:

直接插入排序编程实现如下:

#include<iostream.h> 
void main( void ) 
{ 
 	int ARRAY[10] = { 0, 6, 3, 2, 7, 5, 4, 9, 1, 8 }; 
 	int i,j; 
 	for(  i = 0; i < 10; i++) 
 	{ 
 	 	cout<<ARRAY[i]<<" "; 
 	} 
 	cout<<endl; 
	
	//将 ARRAY[2],…,ARRAY[n]依次按序插入 
 	for( i = 2; i <= 10; i++ ) 	
 	{  	 
		//如果 ARRAY[i]大于一切有序的数值
		//ARRAY[i]将保持原位不动 
 	 	if(ARRAY[i] < ARRAY[i-1]) 	
 	 	{ 
			//将 ARRAY[0]看做是哨兵,是 ARRAY[i]的副本    
			j = i - 1; 
			ARRAY[0] = ARRAY[i];  
 	 	 	do
			{  	 	 	 	 	
				//从右向左在有序区 ARRAY[1..i-1]中  
				//查找 ARRAY[i]的插入位置 
				ARRAY[j+1] = ARRAY[j];  //将数值大于 ARRAY[i]记录后移    
				j-- ; 
 	 	 	}while( ARRAY[0] < ARRAY[j] );  
			
			//ARRAY[i]插入到正确的位置上 
 	 	 	ARRAY[j+1]=ARRAY[0];  	
 	 	} 
 	} 
 	for(  i = 0; i < 10; i++) 
 	{ 
 	 	cout<<ARRAY[i]<<" "; 
 	} 
 	cout<<endl; 
}


注意:所有为简化边界条件而引入的附加结点(元素)均可称为哨兵。引入哨兵后使得查找循环条件的时间大约减少了一半,对于记录数较大的文件节约的时间就相当可观。类似于排序这样使用频率非常高的算法,要尽可能地减少其运行时间。所以不能把上述算法中的哨兵视为雕虫小技。


特别声明:本文仅供交流学习 , 版权归属原作者,并不代表游民部落赞同其观点和对其真实性负责。若文章无意侵犯到您的知识产权,损害了您的利益,烦请与我们联系vmaya_gz@126.com,我们将在24小时内进行修改或删除。

相关推荐:

教程推荐