Ваша функция unsorted
возвращает true
, если первый элемент не самый маленький.Не проверяется, находятся ли другие 2 элемента в неправильном порядке.Это приведет к неправильным результатам, но не является причиной текущей проблемы.
В цикле сортировки вы проверяете, больше ли элемент, чем первый, и затем меняете их местами.Это означает, что восходящий порядок меняется на нисходящий.Это приведет к тому, что функция unsorted
будет возвращать true
все время, и ваш цикл никогда не завершится.
Чтобы исправить это, измените условие:
void sort(int arr[],int s) {
int h,b;
while (unsorted(arr,s)) {
h=arr[0];
for (int i = 1; i < s; i++) {
if (h > arr[i]) {
b = arr[i];
arr[i] = h;
h = b;
}
}
}
for (int i=0; i < s; i++) {
printf("%d",arr[i]);
}
}
Также был зафиксирован диапазон индекса.
Это должно по крайней мере заставить ваш цикл завершиться.Он не будет создавать отсортированный список, так как вы завершите работу слишком рано.
Прежде всего ваша функция unsorted
нуждается в некотором обновлении:
bool unsorted(int ar[], int x) {
int c;
for (int i = 1; i < x; i++) {
if (ar[i-1] > ar[i]) {
return true;
}
else {
return false;
}
}
}
Это также должно вернуть true
, если первый элементсамый низкий, но другие не подходят как {1, 4, 3, 6}
.Также обратите внимание на фиксированный диапазон индекса.
Необходимо применить аналогичное исправление к части сортировки, чтобы обрабатывать неупорядоченные значения в элементах после первого.