注册 登录
编程论坛 数据结构与算法

带哨兵的直接插入排序 和 折半插入排序的一些疑问

一个孩子 发布于 2012-11-17 10:09, 772 次点击
程序代码:
#include<stdio.h>
void sort(int input[],int len)
{
    int i,j;
    for(i=2;i<len;i++)//这里的i的起始值有的是从1开始,有的是从2开始,具体的要用那个值呢?
    {
        input[0]=input[i];
        printf("监视哨的值是:%d\n",input[0]);//从一直这里看监视哨的值是一直在变化的,书上的值貌似并不是一直在变化,是不是我理解错了,求解答
        for(j=i-1;input[j]>input[0];j--)//
        {
            input[j+1]=input[j];
            input[j]=input[0];
        }
    }
}
int main()
{
    int a[30]={0};
    int len;
    int i;
    scanf("%d",&len);
    for(i=0;i<len;i++)
    {
        scanf("%d",&a[i+1]);
    }
    sort(a,len);
    for(i=0;i<len;i++)
    {
        printf("%d ",a[i+1]);
    }//输出的值总是少一个,结果也不对,怎样把不存放有效数据的a[0]的值给省掉,而输出正确结果呢?
    putchar(10);
    return 0;
}
还有就是二分插入排序了:
程序代码:
#include<stdio.h>
void half_sort(int a[],int n)
{
    int i,j,low,high,temp,mid;
    for(i=1;i<n;i++)//也是i的初始值的问题,是从1开始还是从2开始的呢,书上的是从2开始的,而网上的有从1开始的,我不知道用哪一个,求解答
    {
        low=0;
        high=n-1;
        temp=a[i];
        while(low<=high)
        {
            mid=(low+high)/2;
            if(a[mid]<temp)
                low=mid+1;
            else
                high=mid-1;
        }
        for(j=i-1;j>high;j--)//j为什么要大于high呢?
        {
            a[j+1]=a[j];
        }
        a[high+1]=temp;//怎么确定high+1的位置就是插入位置呢,我模拟了好久,总是晕,希望大神给个例子详细的介绍
    }
}
int main()
{
    int a[30];
    int n,i;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    half_sort(a,n);
    for(i=0;i<n;i++)
    {
        printf("%d ",a[i]);
    }//结果不对!
    putchar(10);
    return 0;
}
大神们赶紧回答,越详细越好啊,我数据结构不怎么好的



6 回复
#2
麦麸2012-11-17 22:37
回复 楼主 一个孩子
#include<stdio.h>
 void sort(int input[],int len)
 {
     int i,j;
     for(i=2;i<len;i++)//这里的i的起始值有的是从1开始,有的是从2开始,具体的要用那个值呢?
     { if (input[i]<input[i-1])
         input[0]=input[i];
         //input[0]=input[i];
         //printf("监视哨的值是:%d\n",input[0]);//从一直这里看监视哨的值是一直在变化的,书上的值貌似并不是一直在变化,是不是我理解错了,求解答
         for(j=i-1;input[j]>input[0];j--)//
         {
             input[j+1]=input[j];
             input[j]=input[0];
         }
     }
 }
 
#3
一个孩子2012-11-18 12:59
这个贴怎么能沉呢?
#4
低调的哥额2012-12-02 12:05
而入
#5
低调的哥额2012-12-02 12:23
而入
#6
一个孩子2012-12-02 16:42
已经明白了 呵呵
#7
leijuan_juan2012-12-26 20:59
你怎么明白啦,我表示你开始不懂的我都不懂,求解
1