C言語 ヒープソートについて
ヒープソートをするために以下のようなコードを書きました。
#include<stdio.h> #define MAX_HEAP 10 int a[MAX_HEAP + 1] = {20, 6, 55, 74, 3, 45, 13, 87, 46, 30}; int n = 10; void downheap(int from, int to) { int i, j; int val; val = a[from]; i = from; while(i <= to/2){ j = i * 2; if(j + 1 <= to && a[j] > a[j + 1]){ j++; } if(val <= a[j]){ break; } a[i] = a[j]; i = j; } a[i] = val; } void heapsort() { int i; int tmp; for(i = n/2; i >= 1; i--){ downheap(i, n); } for(i = n; i >= 2; i--){ tmp = a[1]; a[1] = a[i]; a[i] = tmp; downheap(1, i - 1); } } int main(void) { //int a[10] = {20, 6, 55, 74, 3, 45, 13, 87, 46, 30}; int i; heapsort(); for(i = 0; i < 10; i++){ printf("%d ", a[i]); } printf("\n"); return 0; }
そして、出力結果は以下のようにいなりました。
20 87 74 55 46 45 30 13 6 3
ここで1つめの20がソートされないのはなぜでしょうか
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。