主题:这里的插入排序有什么问题?
guyue85868
[专家分:50] 发布于 2009-05-14 04:27:00
void insertionsort(int a[],int left,int right)
{
if(left!=right)
{
insertionsort(a,left,right-1);
int i=right-1;
if(a[i]>=a[right])
{
a[i+1]=a[i];
i--;
}
a[++i]=a[right];
}
}
回复列表 (共3个回复)
沙发
hust512 [专家分:70] 发布于 2009-06-08 13:44:00
你要编写的是插入排序算法吧
何必写成递归的呢,
一下是非递归的代码:
#include <iostream.h>
void InsertSort(int a[],int n)
{
int j=0,i=0;
int key=0;
for (j=1;j<n;j++)
{
key=a[j];
i=j-1;
while(i>=0 && a[i]>key)
{
a[i+1]=a[i];
i-=1;
}
a[i+1]=key;
}
}
void main()
{
int a[10]={2,5,3,1,9,3,2,8,6,7};
InsertSort(a,10);
for(int i=0;i<10;i++)
cout<<a[i];
我已经做了测试的,你直接编译看看!
我再看看你的代码有什么错吧!
}
板凳
hust512 [专家分:70] 发布于 2009-06-08 14:09:00
以下的代码是递归形式的:
#include <iostream.h>
void InsertionSort_digui(int a[],int left,int right)
{
if(left!=right)
{
InsertionSort_digui(a,left,right-1);
int i=right-1;
int key=a[right];
while(a[i]>key)
{
a[i+1]=a[i];
i--;
}
a[++i]=key;
}
}
void main()
{
int a[10]={2,5,3,1,9,3,2,8,6,7};
InsertionSort_digui(a,0,9);
for(int i=0;i<10;i++)
cout<<a[i];
cout<<endl;
}
我用于测试的数据没问题啦!
你代码中的if语句是错误的关键,违背了插入排序的思想哦,回去认真琢磨哦!
还有a[right]应该用临时变量,否则逻辑上很容易出错!
数组排序吗,本来就是原地的算法,要还用原来的变量,真的很“抽象”!
还有疑问的话,联系我吧 (banana.0420@yahoo.com.cn)
3 楼
guyue85868 [专家分:50] 发布于 2009-06-26 18:46:00
真的是测试部分有点问题。多谢大哥了。
我新近发了一个关于C语言的贴子,也希望大哥帮忙看看!
我来回复