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

#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. поэтому я хочу поменять местами указатели вместо реальных значений. временная сложность — это проблема, которую я понимаю, но она будет зависеть от порядка данного списка.