Binary Sort
void BinSort(int x[ ], int n)
{
int i, j;
if (n > MAX_DATA) {
printf("データが多すぎます!\n");
return;
}
else {
for (i = 0; i < MAX_DATA; i++)
Bin[i] = 0; /* 作業用配列の初期化 */
for (i = 0; i < n; i++) /* x[i] の値の */
Bin[x[i]]++; /* Bin[ ] の要素の値を */
/* インクリメント */
j = 0; /* x[ ] の添字として使用 */
for (i = 0; i < MAX_DATA ; i++)
if (Bin[i]) /* 0でなければ */
x[j++] = i; /* 書き戻す */
}
}
Buble Sort
int BubSort(int x[ ], int n)
{
int i, j, temp;
for (i = 0; i < n - 1; i++) {
for (j = n - 1; j > i; j--) {
if (x[j - 1] > x[j]) { /* 前の要素の方が大きかったら */
temp = x[j]; /* 交換する */
x[j] = x[j - 1];
x[j - 1]= temp;
}
}
/* ソートの途中経過を表示 */
ShowData(x, NUM_DATA);
}
}
Heap Sort
void Hpsort(int a[ ], int n)
{
int leaf, root;
leaf = n; /* 初期値は末尾の要素 */
root = n/2; /* 初期値はその親 */
while (root > 0 ) { /* 半順序木を構成 */
DownHeap(a, leaf, root);
root--;
}
while(leaf > 0) {
Swap(a, 1, leaf); /* 半順序木の根と末尾の要素を交換 */
leaf--; /* 末尾の要素を半順序木から外す */
DownHeap(a, leaf, 1); /* 半順序木を再構成する */
}
}
void DownHeap(int a[ ], int leaf, int root)
{
int i;
i = root * 2;
while (i <= leaf) {
if (i < leaf && a[i + 1] > a[i]) /* a[i] と a[i + 1] の大きい方と */
i++;
if (a[root] >= a[i]) /* a[root] と比較 */
break; /* 子の方が大きければ */
Swap(a, root, i); /* 交換 */
root = i; /* 更にその子についても調べる */
i = root * 2;
}
}
void Swap(int a[ ], int i, int j)
{
int temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
Quick Sort
void QSort(int x[ ], int left, int right)
{
int i, j;
int pivot;
i = left; /* ソートする配列の一番小さい要素の添字 */
j = right; /* ソートする配列の一番大きい要素の添字 */
pivot = x[(left + right) / 2]; /* 基準値を配列の中央付近にとる */
while (1) { /* 無限ループ */
while (x[i] < pivot) /* pivot より大きい値が */
i++; /* 出るまで i を増加させる */
while (pivot < x[j]) /* pivot より小さい値が */
j--; /* 出るまで j を減少させる */
if (i >= j) /* i >= j なら */
break; /* 無限ループから抜ける */
Swap(x, i, j); /* x[i] と x[j]を交換 */
i++; /* 次のデータ */
j--;
}
if (left < i - 1) /* 基準値の左に 2 以上要素があれば */
QSort(x, left, i - 1); /* 左の配列を Q ソートする */
if (j + 1 < right) /* 基準値の右に 2 以上要素があれば */
QSort(x, j + 1, right); /* 右の配列を Q ソートする */
}
void Swap(int x[ ], int i, int j)
{
int temp;
temp = x[i];
x[i] = x[j];
x[j] = temp;
}