我的代碼以供選擇排序錯誤的功能選擇,排序
#include <stdio.h>
void selection_sort(int a[], int n);
int main()
{
int size;
printf("Enter the size of array: ");
scanf("%d",&size);
int b[size],i = 0;
printf("Enter %d integers to be sorted: ",size);
while(i++ < size)
scanf("%d",&b[i]);
selection_sort(b, size);
printf("Sorted integers(by selection sort) are: ");
for(int i = 0; i < size; i++)
printf("%d",b[i]);
return 0;
}
void selection_sort(int a[], int n)
{
while(n >= 0)
{
if(n == 0)
break;
else
{
int i = 0, c = 0;
int largest = a[0];
while(i++ < n)
if(largest < a[i])
{
c = i ;
largest = a[i];
}
int temp = a[--n];
a[n] = largest;
a[c] = temp;
selection_sort(a, n);
}
}
}
上以升序排列數組
3 4 1 2
是給奇怪的輸出
2293388 4 3 0
我檢查這很多時間,但沒有解決問題。 我應該怎麼做才能正確工作?
使用的算法:
1.搜索數組中的最大元素。
2.將最大的元素移動到數組的最後位置。
3.遞歸調用自身以排序數組的第一個n-1元素。
請不要給任何其他解決方案,否則我會感到困惑。
您期望的輸出是什麼以及您收到的輸出有什麼奇怪的現象?還有足夠的代碼來查看你如何調用該函數將有所幫助。如果'n'是數組的大小,那麼訪問'a [n]'是未定義的行爲。 –
@ShafikYaghmour好的,讓我編輯 – haccks
你怎麼「檢查這個」?使用調試器進行調試會告訴你,使用的索引存在一些問題(例如,代碼似乎從不檢查「a」[1]與「最大」)。即使你出於某種原因不能使用調試器,一些'printf()'傾向值(如「最大」,「i」,「c」,「n」和數組值)在每一步都會很快顯示出錯。 –