Я просто немного потренировался и попытался отсортировать массив с помощью алгоритма пузырьковой сортировки.
Компилятор не дал мне ни предупреждений, ни ошибок, и он работал хорошо! Сначала вы набираете 10 раз число, а затем программа сортирует их + печатает их.
Код:
#include <iostream>
using namespace std;
void arr_sort(int* array, const int arr_size){
int temp = 0; //Temporary integer to store (if necessary) the current element
int end = 0; //Run time condition
while(end++ != arr_size){ // Will loop max. 10 times
for(int i = 0; i < arr_size; i++){
if(array[i] > array[i + 1]){ //If the current element
temp = array[i]; //is bigger than the next
array[i] = array[i + 1];//Change the positions
array[i + 1] = temp;
}
}
}
}
int main(){
int arr_input[10];
for(int i = 0; i < 10;i++) //The user has to type 10 numbers
cin >> arr_input[i]; //which will be stored in this array
arr_sort(arr_input, 10); //sorts the array
cout << endl << endl;
for(int i = 0; i < 10; i++) //Print out the array!
cout << arr_input[i] << ", ";
cout << endl;
return 0;
}
Моя единственная проблема — цикл while в функции arr_sort. Я имею в виду, что сортирует массив до конец имеет то же значение, что и arr_size. Но часто это не нужно так долго. Мой вопрос сейчас … Как я могу улучшить эту функцию? Как я могу проверить, полностью ли отсортирован массив, чтобы цикл while мог остановиться без запуска в другой раз и в другой раз …?
Сразу за циклом for поместите bool и установите его в false. Внутри блока подкачки установите для bool значение true. После цикла for проверьте значение логического значения, и, если оно все еще равно false, перестановки не были выполнены, поэтому массив отсортирован, поэтому выйдите из цикла while.
while(end++ != arr_size){ // Will loop max. 10 times
bool swapped = false;
for(int i = 0; i < arr_size; i++){
if(array[i] > array[i + 1]){ //If the current element
temp = array[i]; //is bigger than the next
array[i] = array[i + 1];//Change the positions
array[i + 1] = temp;
swapped = true;
}
}
if (!swapped) break;
}
Перед вашим for
цикл, предположим, что это отсортировано:
bool sorted = true;
В вашем if
Statement`, запишите, что он не отсортирован:
sorted = false;
После вашего for
loop`, вернуть, если не было доказательств того, что он не отсортирован:
if ( sorted ) return;