|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
3.从键盘输入10个整数完成以下功能:将这10个数的前8个从大到小排序。
要求:排序过程由一个函数实现,函数原型为:
void sort(int nArray[], int n);
最后,在主程序中测试这个函数。
题目如上,代码如下,问题最下。
- #include <stdio.h>
- #include <stdlib.h>
- void sort(int nArray[], int n)
- {
- int temp,i,j;
- for(i=0;i<n;i++){
- if(nArray[i]<nArray[i+1])
- {
- temp=nArray[i];
- nArray[i]=nArray[i+1];
- nArray[i+1]=temp;
- }
- else continue;
- for(i=n;i>=0;i--){
- if(nArray[i+1]>nArray[i])
- {
- temp=nArray[i];
- nArray[i]=nArray[i+1];
- nArray[i+1]=temp;
- }
- else continue;
- }
- }
- }
- int main()
- {
- int arr[] = {2,46,52,5,7,9,631,6,32,54};
- int n,i,len;
- scanf("%d",&n);
- sort(arr,n);
- len = sizeof(arr)/sizeof(int);
- for (i = 0; i<len; i++)
- {
- printf("%d ",arr[i]);
- }
- return 0;
- }
复制代码
不知道为什么当我输入5的时候是前7个数排序了,输入8的时候是10个数全部排序了,只有我把主函数中scanf里的n改成n-2以后才正常,想知道是哪里的问题。
首先冒泡排序不是你这么冒的。
第二,下标是从0开始,所以前8个 就意味着是 8-1
代码中 为 n-1
- #include <stdio.h>
- #include <stdlib.h>
- void sort(int nArray[], int n)
- {
- int i, j, temp;
- for (i = 0; i < n; i++) // 10个数,10 - 1轮冒泡,每一轮都将当前最大的数推到最后
- {
- for (j = 0; j < n - i; j++) // 9 - i,意思是每当经过一轮冒泡后,就减少一次比较
- if (nArray[j] > nArray[j+1])
- {
- temp = nArray[j];
- nArray[j] = nArray[j+1];
- nArray[j+1] = temp;
- }
- }
- }
- int main()
- {
- int arr[] = {2,46,52,5,7,9,631,6,32,54};
- int n,i,len;
- scanf("%d",&n);
- sort(arr,n-1);
- len = sizeof(arr)/sizeof(int);
- for (i = 0; i<len; i++)
- {
- printf("%d ",arr[i]);
- }
- return 0;
- }
复制代码
|
|