[英]C Program isn't returning anything
我編寫了一個 C 程序來對數組進行排序,但該程序沒有返回任何內容——它只是運行並卡在那里,就好像它在等待輸入一樣。 下面是代碼:
#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;
}
如果第一個元素不是最小的,則您的函數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;
}
}
return false;
}
如果第一個元素最低但其他元素不適合{1, 4, 3, 6}
這也應該返回true
。 還要注意固定索引范圍。
您需要對排序部分應用類似的修復程序,以處理第一個元素之后的元素中的亂序值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.