码迷,mamicode.com
首页 > 编程语言 > 详细

书面采访系列---排序算法专辑---直接插入排序---不正确的答案正确

时间:2015-12-09 13:52:45      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

面试题 24:编码直接插入排序

原来的答案:

#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;
for( i = 2; i <= 10; i++ )        //将 ARRAY[2],…,ARRAY[n]依次按序插入
{
if(ARRAY[i] < ARRAY[i -1])    //假设 ARRAY[i]大于一切有序的数值,ARRAY[i]将保持原位不动
{
ARRAY[0] = ARRAY[i];    //将 ARRAY[0]看做是哨兵,是 ARRAY[i]的副本
j = i - 1;
do{            //从右向左在有序区 ARRAY[1..i-1]中查找 ARRAY[i]的插入位置
ARRAY[j+1] = ARRAY[j];    //将数值大于 ARRAY[i]记录后移
j-- ;
}while( ARRAY[0] < ARRAY[j] );
ARRAY[j+1]=ARRAY[0];    //ARRAY[i]插入到正确的位置上
}
}
for(i = 0; i < 10; i++)
{
cout<<ARRAY[i]<<" ";
}
cout<<endl;
} 

思路分析:

整个思路没有不论什么错误。

错误分析例如以下:

for( i = 2; i <= 10; i++ )  //错误一:相当于默认i=0和i=1是已经排好序的;错误二:i=10明显超出了数组分配的大小。栈溢出错误
ARRAY[0]//选为哨兵导致序列中的第一数字总是更改无法实现正确排序
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

修正答案:

#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int ARRAY[10] = { 6, 9, 3, 7, 2, 5, 4, 0, 1, 8 };
	int i,j,temp;

	//输出排序前的数列
	for(i = 0; i < 10; i++)
	{
		cout<<ARRAY[i]<<" ";
	}
	cout<<endl;

	for( i = 1; i < 10; i++ )        //将 ARRAY[2],…,ARRAY[n]依次按序插入
	{
		if(ARRAY[i] < ARRAY[i -1])    //假设 ARRAY[i]大于一切有序的数值,//ARRAY[i]将保持原位不动
		{
			temp = ARRAY[i];    //将temp做哨兵,是 ARRAY[i]的副本
			j = i - 1;

			do{                     //从右向左在有序区 ARRAY[1..i-1]中;查找 ARRAY[i]的插入位置				
				ARRAY[j+1] = ARRAY[j];    //将数值大于 ARRAY[i]记录后移
				j-- ;
			}while( temp < ARRAY[j] );

			ARRAY[j+1]=temp;    //ARRAY[i]插入到正确的位置上
		}
	}

	//输出排序后的数列
	for(i = 0; i < 10; i++)
	{
		cout<<ARRAY[i]<<" ";
	}
	cout<<endl;
	return 0;
}



修正分析:

修正一:讲temp作为哨兵。修正二:for循环从i=1開始9结束。

修正后输出:

技术分享

书面采访系列---排序算法专辑---直接插入排序---不正确的答案正确

标签:

原文地址:http://www.cnblogs.com/mengfanrong/p/5032463.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!