2014-04-01 86 views
1

我正在尝试以下练习,但陷入了这个过程。用数组排序整数。

写一个完整的程序,读取在从标准输入整数 的任意序列,和在 排序顺序,并用除去所有重复它们写入到标准输出。你可以假设 输入包含至多100个整数。

我很难理解数组,并试图弄清楚我需要做什么。我写下了一些代码,但是我有一种强烈的感觉,我无法完成它。我不是要求某人为我完成它,我只是想要一些指导如何走向正确的方向。任何帮助是极大的赞赏。

#include <iostream> 
using namespace std; 

int main() 
{ 

    //I believe this is a start. 
    int numbers [100]; 

    //declaring a counter 
    int i; 

    //making a for loop to count the integers from 1 to 100 
    for (i=0; i<100; i++) 
    {cin>>numbers[i];} 

    //This is the point where I got lost 

    if (i<100) 
     cout<<numbers[i]<<""<<endl; 

} 
+3

因为你只需要引导,也许你可以从阅读开始的:http://en.wikipedia.org/wiki/Sorting_algorithm – s4m0k

+2

请注意,您的代码假定你将永远* *输入100个整数。您可能希望仅用10个整数开发此代码,直到您认为它运行良好,为自己节省一些键入空间。 – nonsensickle

+1

另外,最后一行永远不会执行,因为'for'循环之后'i'将始终为100。 – nonsensickle

回答

0

为了排序一些int数,你有几种方法可以尝试一些你想要的。

一种方法是当您在第一个循环中读取数据时,以这种方式将数据放入阵列中的正确位置,使用另一个循环并移动新数据直至到达较小数目。然后把新数据放在前面。
如果您发现数量相同,您可以忽略新数据并使用中断并获取新数据。

for (i=0; i<100; i++) 
{ 
    int temp ; 
    cin>> temp; 
    int j; 
    for(j = i; j>= 0 ; j--) 
    { 
     if(j != 0 && number[j-1]== temp) 
      break ; 
     if(j != 0 && number[j-1] > temp) 
     { 
      number[j] = number[j-1] ; 
     } 
     else 
     { 
      number[j] = temp ; 
      break; 
     } 
    } 
} 

我觉得这种方式是最好的,但你必须像其他方式: 排序使用像 bubble sort Quick sort的算法,然后用循环删除所有重复号码的所有号码。

int temp[100] ; 
int k = 0 ; 
temp[0] = number[0] ; 
for(int i = 1 ; i < 100 ; i++) 
{ 
    if(temp[k] != number[i]) 
    { 
     k++; 
     temp[k] = number[i] ; 
    } 

}