#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开始,具体的要用那个值呢?
{
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;
}
还有就是二分插入排序了: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;
}
大神们赶紧回答,越详细越好啊,我数据结构不怎么好的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;
}