带哨兵的直接插入排序 和 折半插入排序的一些疑问
程序代码:
#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; }大神们赶紧回答,越详细越好啊,我数据结构不怎么好的