2010-07-23 5 views
2

Если я хочу, чтобы отсортировать 0 элемента второго измерения равно, что:C++ сортировка значения массива

short arr[5]; 

arr[0][0] = 122; 
arr[0][1] = 33; 
arr[0][2] = 45; 

arr[1][0] = 33; 
arr[1][1] = 12; 
arr[1][2] = 42; 
. 
. 
. 

Он сортирует arr[i][0], но arr[i][1] и arr[i][2] придет с arr[i][0] к новому элементу.

+0

Используйте C++ 'vector <>', а не массив C-style, тогда вы можете просто применить метод 'sort'. Если вы * должны * использовать массивы C-стиля по какой-либо причине, используйте 'qsort()' из 'cstdlib' для сортировки. –

+2

@Paul: 'sort' - это общий алгоритм функции, не являющийся членом. Его можно использовать с массивом так же легко, как его можно использовать с «вектором». –

+6

Вы объявили одномерный массив и обращаетесь к нему как к двумерному массиву? Что вы здесь делаете? – bta

ответ

6

Для сортировки стандартного массива C, используя std::sort алгоритм:

#include <algorithm> 
    ... 
    sort(&arr[0], &arr[0] + 5) 

Теперь, если у вас есть двумерный массив, вы можете использовать ту же идею для сортировки второе измерение каждого элемента в первом измерении:

short arr[5][5]; 
... 
for(int i = 0; i < 5; ++i) { 
    sort(&arr[i][0], &arr[i][0] + 5); 
} 
3

std::sort воли, по умолчанию сортировать объекты в порядке возрастания. Для сортировки в порядке убывания, вы можете использовать std::greater функциональный объект:

std::sort(arr, arr + 5, std::greater<short>()); 
1

Есть слишком много алгоритмов сортировки, как и сортировки пузырьковой сортировки, с различной сложностью. И эта сложность зависит от размера набора данных, порядка данных по умолчанию в наборе данных и т. Д. Вы должны изучить свой набор данных и выбрать один алгоритм, который будет быстрее соответствовать вашим требованиям. Алгоритмы сортировки можно найти в http://en.wikipedia.org/wiki/Sorting_algorithm.

+2

Учитывая, что стандартная библиотека имеет «сортировку» (средний регистр N log N) и «stable_sort» (наихудший случай N (log N)^2), редко существует хорошая причина для реализации вашего собственного алгоритма сортировки. –

1

Если это домашнее задание, вы, вероятно, не захотите использовать std::sort. Ваш учитель может подумать, что вы нахальны: P

Я пошел бы с тем, что сказал Мухит, и попытался изучить статью Википедии об алгоритмах сортировки, http://en.wikipedia.org/wiki/Sorting_algorithm. Большинство отдельных статей имеют алгоритмы, реализованные в псевдокоде, поэтому вы можете просто выбрать один для кодирования.

Но если это для другого проекта, да, определенно перейдите с STL, на самом деле не должно быть никаких причин для кода алгоритма сортировки вручную.

+0

Это не домашнее задание. – sundowatch

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