2015-01-06 33 views
-5
// Number Sorting Algorithm - Trey Taylor 2014 
#include <iostream> 
#include <cstdlib> 
#include <string> 

using namespace std; 
    int main() { 
     int numbersort [] = {200, 85, 63, 4} 
     cout << "The numbers scrambled are: "; 
     cout << numbersort[0] << ", "; 
     cout << numbersort[1] << ", "; 
     cout << numbersort[2] << ", "; 
     cout << numbersort[3] << ", " << endl; 
     firstlast: 
     if (numbersort[0] > numbersort[1]) { 
      int temp = 0; 
      temp = numbersort[0]; 
      numbersort[0] = numbersort[1]; 
      numbersort[1] = temp; 
     } 
      if (numbersort[1] > numbersort[2]) { 
       int temp = 0; 
       temp = numbersort[1]; 
       numbersort[1] = numbersort[2]; 
       numbersort[2] = temp; 
      } 
       if (numbersort[2] > numbersort[3]) { 
        int temp = 0; 
        temp = numbersort[2]; 
        numbersort[2] = numbersort [3]; 
        numbersort[3] = temp; 
       } 
         while (numbersort[0] > numbersort[1]) { 
         goto firstlast; 
       } 
     cout << "The numbers unscrambled are: "; 
     cout << numbersort[0] << ", "; 
     cout << numbersort[1] << ", "; 
     cout << numbersort[2] << ", "; 
     cout << numbersort[3] << ", "; 
} 

有谁知道,如果有一种方法使用for或while循环由左到阵列中的号码重新排列升序排列正确的,而不是仅仅使用3 if语句反正做这个排序算法更高效/更短的C++

+3

这似乎属于http://codereview.stackexchange.com/ –

+3

最短的解决方法是调用['标准:: sort'(http://en.cppreference.com/w/cpp /算法/排序)。查看链接的例子。 – 5gon12eder

+3

如果您想让某人查看您的代码,您应该询问[codereview.se] –

回答

2

你可以使用std ::排序或冒泡排序算法(link how it works)。算法检查是从下一个更大的循环中的当前数字。如果它改变这些数字在数组中。最后你会得到阵列末端的最大数字,在数组开始时最小。

int main() 
{ 
    int numbersort[] = { 200, 85, 63, 4 }; 
    int temp = 0; 
    // This loop sorts all numbers in the array 
    for (int z = 0; z < 4; ++z) 
    { 
     // This loop sorts only one number to the end 
     for (int i = 0; i < 3; ++i) 
     { 
      if (numbersort[i] > numbersort[i + 1]) 
      { 
       temp = numbersort[i]; 
       numbersort[i] = numbersort[i + 1]; 
       numbersort[i + 1] = temp; 
      } 
     } 
    } 

    cout << "Sorted numbers" << endl; 
    for (int i = 0; i < 4; ++i) 
    { 
     cout << numbersort[i] << endl; 
    } 

    system("pause"); 
    return 0; 
} 
1

事情是这样的:

i = 0; 
while (i < (sizeof(numbersort)/sizeof(numbersort[0])) - 1) 
{ 
    if (numbersort[i] >= numbersort[i + 1]) 
    { 
    std::swap(numbersort[i], numbersort[i + 1]); 
    i = 0; 
    } 
    else 
    { 
    ++i; 
    } 
}