選択ソートは配列の最小値(最大値)を持つ要素を探してそれを配列の先頭要素と交換することで整列を行うアルゴリズムです。
void selectionSort() が配列を昇順に並び替える選択ソートの実装です。
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* This program demonstrates the use of the selection sort algorithm. For
* more information about this and other sorting algorithms, see
* http://linux.wku.edu/~lamonml/kb.html
*
*/
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#define NUM_ITEMS 100
void selectionSort(int numbers[], int array_size);
int numbers[NUM_ITEMS];
int main()
{
int i;
// seed random number generator
srand(getpid());
// fill array with random integers
for (i = 0; i < NUM_ITEMS; i++) {
numbers[i] = rand();
}
// perform selection sort on array
selectionSort(numbers, NUM_ITEMS);
printf("Done with sort.\n");
for (i = 0; i < NUM_ITEMS; i++) {
printf("%i\n", numbers[i]);
}
return 0;
}
void selectionSort(int numbers[], int array_size)
{
int i; // 配列の先頭を指すインデックス
int j; // 残りの要素を指すインデックス
int min; // 最小値を持つ要素のインデックス
int temp; // 交換用の一時変数
for (i = 0; i < array_size-1; i++) {
min = i; // 配列の先頭を最小値の要素とする
for (j = i+1; j < array_size; j++) { // 比較のループ
if (numbers[j] < numbers[min]) {
min = j; // 最小値を持つ要素を更新
}
}
// 最小値を持つ要素を先頭の要素と交換
temp = numbers[i];
numbers[i] = numbers[min];
numbers[min] = temp;
}
}