C语言排序问题!急急急急急急急急急急急急急急急急急急急急急!

来源:百度知道 编辑:UC知道 时间:2024/05/09 03:58:24
#include <stdio.h>

void main()
{
int d[10];
int i , t = 0;

for (i = 0 ; i < 10 ; i++)
{
scanf ("%d" , &d[i]);
}
for (i = 0 ; i < 10 ; i++)
{
if (d[i] > d[i+1])
{
t = d[i];
d[i] = d[i+1];
d[i+1] = t;
}
}
printf("%d" , d[i]);
}
我写的排序,输入10个数按照由小到大的顺序排列。
但是好像错了运行不了麻烦大哥们改改

如果是5,4,2,3
按照你的算法排序下来:
4,5,2,3
4,2,5,3
4,2,3,5(最终成这样了)
因为你只是拿当前那个与后面的比,并没有考虑到已经比过的那些是否比后面的大。
正确的算法是:
第一个依次和后面的比,只要比后面的大,就把后面那个赋值给第一个,这样一轮下来最小的那个就被找出来放到第一个位置了,接着又从第二个开始依次比下去。这种方法似乎叫冒泡排序,还有一些效率比较高的快速排序法什么的
下面给你代码:

#include <stdio.h>

void main()
{
int d[10];
int i,n,t = 0;

for (i = 0 ; i < 10 ; i++)
{
scanf ("%d" , &d[i]);
}

for(i=0;i<10;i++)
{
for(n=0;n<10;n++)
{
if(d[i]>d[n+1])//当i=0时,就是第一个数和后面的依次比较
{
t = d[i];
d[i] = d[n+1];
d[n+1] = t;
}
}
}

少了一重循环
#include <stdio.h>

int main()
{
int d[10];
int i , t = 0;
int j;
for (i = 0 ; i < 10 ; i++)
{
scanf ("%d" , &d[i]);
}

for (i = 0 ; i < 9 ; i++)
{
for(j =0;j