программа ничего не возвращает - PullRequest
0 голосов
/ 03 марта 2019

Я написал AC-программу для сортировки массива, но программа не возвращает ничего, что она просто запустила и застряла там, как будто она ожидает ввода.ниже код

#include<stdio.h>

bool unsorted(int ar[],int x){
    int c;
    for(int i=1;i<=x;i++){
        if(ar[0]>ar[i]){
            return true;
        }
        else 
            return false;
    }
}   

void sort(int arr[],int s){

    int h,b;
    while(unsorted(arr,s)){
        h=arr[0];
        for(int i=0;i<=s;i++){
            if(arr[i]>h){
                b=arr[i];
                arr[i]=h;
                h=b;
        }
    }
     }
        for(int i=0;i<=s;i++){
            printf("%d",arr[i]);
    }
}
int main(){

    int arr[3]={ 2,1,3 };
    sort(arr,3);
    return 0;
}

1 Ответ

0 голосов
/ 03 марта 2019

Ваша функция 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}.Также обратите внимание на фиксированный диапазон индекса.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...