2017-02-17 197 views
-1

我已经编写了程序来输入数字,并在C中以升序列印。我尝试了,但它无法正常工作。谁能告诉我如何以正确的方式做到这一点?按升序对数字进行排序

我尝试过使用排序,但它没有以正确的方式工作;怎么做?

代码:

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int highest,temp=0; //decleartion 
    int a[5]; 
    int i; 
    for(i=0;i<5;i++) 
    { 
     scanf("%d",&a[i]); //taking input 
    } 
    highest=a[0]; 
    for(i=1;i<5;i++) 
    { 
     if(a[i]<a[0]) 
     { 
      temp=a[0]; 
      a[0]=a[i]; 
      a[i]=temp; //comparing 
     } 
    } 
    for(i=0;i<5;i++) 
    { 
     printf("%d\n",a[i]); //printing 
    } 
    return 0; 
} 
+1

必须在冒泡排序技术来读取,然后再试一次执行代码:) – Cherubim

+0

确定最大元素,并重复过程来确定剩余元素的最大值。 – BLUEPIXY

+0

欢迎来到Stack Overflow。 请注意,在这里说'谢谢'的首选方式是通过 提高投票的好问题和有用的答案(一旦你有足够的声誉这样做),并接受任何 问题最有用的答案,你问(这也给你一个小小的提升,以你的声望 )。 请参阅[关于]页面,以及[如何在此处提问 ?]和 [当有人回答我的 问题时,我该怎么办? ?](http://stackoverflow.com/help/someone-answers) –

回答

1

您的代码只针对前两个元素的比较。

试试这个 -

for (i = 0; i < n; ++i) 
{ 
    for (j = i + 1; j < n; ++j) 
    { 
     if (number[i] > number[j]) 
     { 
      temp = number[i]; 
      number[i] = number[j]; 
      number[j] = temp; 
      } 
     } 
    } 
+0

感谢兄弟帮助了很多! –

+0

Your welcome .. –

0

您也可以尝试这个 -

for (i = 0; i < n; ++i) 
{ 
    for (j = i + 1; j < n; ++j) 
    { 
     if (number[i] > number[j]) 
     { 
      number[i] = number[i] + number[j]; 
      number[j] = number[i] - number[j]; 
      number[i] = number[i] - number[j]; 
     } 
    } 
} 
+0

这是交换数组中两个元素的非常愚蠢的方式。它完全不必要地冒着溢出的风险,并且招致三次算术运算的花费,这将比一个临时变量占用更多空间。 –