2011-01-30 7 views
1

Я хочу создать систему сортировки, она получает некоторые цифры и сортирует ее DESC.Проблема с ++ ++ ++

вхожу 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 (упорядоченно), что код работает отлично .. но если ввести, что числа, беспорядочное, она разбивается ..

мой код ::

#include <iostream.h> 
main() { 
int a[10], max, temp; 
for (int i=0; i<10; i++) { 
    cout << "Enter number " << i+1 << ": "; 
    cin >> a[i]; 
} 

for (int j=0; j<10; j++) { 
    for (int x=0; x<=j; x++) { 
    if (a[j] > a[j+1]) { 
    temp = a[j]; 
    a[j] = a[j+1]; 
    a[j+1] = temp; 
    } 
    } 
} 

cout << "Sort [DESC]: \n"; 
for (int w=9; w>=0; w--) { 
    cout << w << ". " << a[w] << "\n"; 
} 
//cout << "Max: " << max; 
} 

Спасибо много ...

+0

Похож на [традиционный вид пузыря] (http://mathbits.com/mathbits/compsci/arrays/bubble.htm) отсюда. –

+0

Вы знаете, что вам не нужно это делать правильно? Если это не только для учебных целей. http://www.cplusplus.com/reference/algorithm/sort/ http://www.cplusplus.com/reference/std/functional/greater/ –

+2

Это 'int main()'. Неявный int больше не действует в C++. –

ответ

2

Вы получаете доступ к a[10] (через a[j+1]), что, безусловно, неверно. Наивная пузырьковая сортировка обычно выглядит следующим образом, например:

for(int i = NUMBER_OF_ELEMENTS - 1; i > 0; --i) 
for(int t = 0; t < i; ++t) 
{ 
    if(item [t] greater than [t+1]) 
    { 
     swap item [t] with [t+1] 
    } 
} 
+0

Не понимаю, почему '> 0' - ваше сравнение - обычно это было бы либо сравнение левого элемента с правильным элементом, либо это была бы функция сравнения стиля strcmp, в этом случае вам нужно' ! = 0' не '> 0'. –

+0

@Billy: Изменено это, это был просто пример. В случае целых чисел это будет 'item [t]> item [t + 1]', для строк это будет 'strcmp (item [t], item [t + 1])> 0' и т. Д. – AndiDog

+0

Справедливо. +1. –

1

, если вы используете C++ вы можете использовать STL std::vector вместо массив, а затем использовать алгоритм STL std::sort

+4

'std :: sort' - хороший совет. Однако, учитывая, что массив является выделенным стеком, он совершенно прекрасен - нет причин использовать вектор здесь. –

3

Я хочу создать сортировку система

Уже сделано для вас, как часть стандартной библиотеки:

http://codepad.org/VBAB0JBo

#include <algorithm> 
#include <iostream> 
#include <functional> 

void PrintNumbers(int * myArray) 
{ 
    std::copy(myArray, myArray + 10, std::ostream_iterator<int>(std::cout, ",")); 
    std::cout << std::endl; 
} 

int main() 
{ 
    int myArray[10] = {1,2,3,4,5,6,7,8,9,10}; 
    //Sort ascending 
    std::sort(myArray, myArray + 10); 
    PrintNumbers(myArray); 
    //Sort descending 
    std::sort(myArray, myArray + 10, std::greater<int>()); 
    PrintNumbers(myArray); 
    return 0; 
} 
Смежные вопросы