回 帖 发 新 帖 刷新版面

主题:这里的插入排序有什么问题?

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个回复)

沙发

你要编写的是插入排序算法吧
何必写成递归的呢,
一下是非递归的代码:
#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];

我已经做了测试的,你直接编译看看!
我再看看你的代码有什么错吧!
}

板凳

以下的代码是递归形式的:
#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 楼


真的是测试部分有点问题。多谢大哥了。
我新近发了一个关于C语言的贴子,也希望大哥帮忙看看!

我来回复

您尚未登录,请登录后再回复。点此登录或注册