这个c语言的排序错在哪里

来源:百度知道 编辑:UC知道 时间:2024/05/21 08:44:14
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<conio.h>
#define N 20

main(){
int i = 0, temp, n, j, k;
int num[N];

//get 20 rand num between 0 and 100
srand((int)time(0));
for( ; ; ){
n = rand();
if( n >= 0 && n <=100 ){
num[i] = n;
i++;
}
if( i > 19 ) break;
}

//sort the 20 num
for( j = 0; j <= 19; j++ ){
for( k = 0; k < 19 - j; k++ ){
if( num[k] > num[k+1] ){
temp = num[k+1];
num[k] = num[k+1];
num[k+1] = temp;
}
}
}

//output the 20 num
for( i = 0; i <= 19; i++ ){
printf("%d\t",num[i] );
}

getch();
}
如果把排序这部分去掉的话,可以得到我想要的随机数,但是加上排序的话就得不到我想要的了随机数排序了

temp = num[k+1];
num[k] = num[k+1];
num[k+1] = temp;

改成
temp = num[k];
num[k] = num[k+1];
num[k+1] = temp;

循环的地方写的有点乱,修改了运行正确

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<conio.h>
#define N 20

void main(){
int i = 0, temp, n, j, k;
int num[N];

//get 20 rand num between 0 and 100
srand((int)time(0));
for( ; ; ){
n = rand();
if( n >= 0 && n <=100 ){
num[i] = n;
i++;
}
if( i > 19 ) break;
}

//sort the 20 num
for( j = 0; j < 19; j++ ){
for( k = j+1; k <= 19 ; k++ ){
if( num[k] > num[j] ){
temp = num[j];
num[k] = num[j];
num[j] = temp;
}
}
}

//output the 20 num
for( i = 0; i <= 19; i++ ){
printf("%d\t",num[i] );
}

getch();
return ;
}