2014-04-01 3 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

Кроме того, последняя строка никогда не будет выполняться, потому что 'i' всегда будет 100 после цикла' for'. – nonsensickle

ответ

0

Для того, чтобы отсортировать номер по Интернету, у вас есть несколько способов, по которым вы можете попробовать некоторые из которых вы хотите.

Один из способов - когда вы читаете данные в первом цикле, помещаете данные в нужное положение в массиве таким образом, чтобы использовать другой цикл и переносить новые данные до тех пор, пока не приступите к меньшему числу. Затем поставьте перед этим новые данные.
Если вы найдете равное количество, вы можете игнорировать новые данные и использовать перерыв и получить новые данные.

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] ; 
    } 

}

Смежные вопросы