|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
今天刚看到数组的排序算法,
书中给的是从小到大排序,
自己想尝试从大到小排序,
但是自己的程序始终跑不动,
求一个插入排序法从从大大小排序下面是从小到大排序的代码
- #include<stdio.h>
- #define N 10
- void sort_insert(int a[N])
- {
- int b[N];
- int i,j,temp;
- for(i=1;i<N;i++)
- {
- temp=a[i];
-
- for(j=i;temp<a[j-1];j--) a[j]=a[j-1];
-
- a[j]=temp;
- }
- }
- void output(int a[N])
- {
- int i;
- printf("\nThe array is:\n");
- for(i=0;i<N;i++) printf("a[%d]=%d\t",i,a[i]);
- }
- int main()
- {
- int a[N]={2,5,3,8,4,7,34,3,67,2};
-
- sort_insert(a);
- output(a);
-
- return 0;
- }
复制代码
之所以原来的从小到大的排序没出错,是因为基本上没有用到的空间的值都是负值,所以你那样写也没有出错。但是一旦所排序的序列中有非常小的负值,可能就会出错了,下标溢出。。
- #include<stdio.h>
- #define N 10
- void sort_insert(int a[N])
- {
- int b[N];
- int i,j,temp;
- for(i=1;i<N;i++)
- {
- temp=a[i];
- for(j=i;temp>a[j-1] && j>0;j--)//这里源程序是有问题的
- a[j]=a[j-1];
- a[j]=temp;
- }
- }
- void output(int a[N])
- {
- int i;
- printf("\nThe array is:\n");
- for(i=0;i<N;i++) printf("a[%d]=%d\t",i,a[i]);
- }
- int main()
- {
- int a[N]={2 ,5,3,8,4,7,34,3,67,2};
- sort_insert(a);
- output(a);
- return 0;
- }
复制代码
|
|