#c #sorting
#c #сортировка
Вопрос:
int arr[] = {22, 0, 45, 32, 12, 78, 89};
int size= sizeof(arr)/sizeof(arr[0]);
cout << size << endl;
int temp =arr[0];
Переменная Temp не возвращает новые обновленные элементы массива; она возвращает массив по умолчанию, а не новый отсортированный массив в порядке возрастания.
for (int i=0; i<size; i ) {
int temp = arr[i];
for (int j=i 1; j<size; j ) {
if (temp > arr[j]) {
temp=arr[j];
}
}
arr[i]=temp;
cout << arr[i] << endl;
}
}
Комментарии:
1. Откуда вы знаете, что
temp
возвращает или не возвращает? Вы никогда не печатаетеtemp
, или элементыarr2
. Вы печатаете элементыarr
, которые никогда не обновляются и поэтому, конечно, сохраняют свои исходные значения.2. значение temp обновляется. через сравнение, не так ли?
3. Да, но вы не печатаете
temp
или какие-либо значения, которыеtemp
могут повлиять.4. да, я вижу, я обновил вопрос.
5. Текущий код должен печатать минимальный элемент хвостовой части
arr
, начиная с позицииi
. Он должен печатать 0 два раза, затем 12 три раза, затем 78 и 89. Разве это не то, чего вы ожидаете? Разве это не то, что вы наблюдаете?
Ответ №1:
»’
int arr[]={22,0,45,32,12,78,89};
int size= sizeof(arr)/sizeof(arr[0]);
cout<<size<<endl;
for(int i=0;i<size;i ){
int temp =arr[i];
«‘
во внутреннем цикле значение temp будет заменено, чтобы более старое сравниваемое значение не повторялось.
«‘
for(int j=i 1 ; j<size-1;j ){
if (temp>arr[j]){
temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
cout<<arr[i]<<endl;
}
}
»’
Комментарии:
1. Это не так, как работает сортировка выбора, но, по крайней мере, вы делаете что-то похожее на сортировку.
2. Я знаю, как это работает, и теперь сам написал код, чтобы показать.
3. какие изменения вы могли бы предложить, сэр
4. На самом деле выполнение сортировки выбора было бы хорошим началом, если заголовок вашего вопроса является фактической целью. Сортировка выбора заключается не в том, чтобы запомнить, что такое «наибольшее» или «наименьшее» значение; речь идет о том, чтобы запомнить, где его найти . Хотя алгоритм O (N ^ 2), сортировка выбора вызовет не более (N-1) обменов для последовательности длиной N. Честно говоря, это один из единственных полезных атрибутов алгоритма. Если ваш базовый тип данных дешев для сравнения, но дорог для замены, а последовательность достаточно короткая, сортировка выбора может быть жизнеспособным вариантом.
5. поэтому я хочу поменять местами указатели вместо реальных значений. временная сложность — это проблема, которую я понимаю, но она будет зависеть от порядка данного списка.