選擇排序很簡單,基本思想如下:
從待排序的記錄序列中選擇關鍵碼最小(或最大)的記錄並將它與序列中的第一個記錄交換位置;然後從不包括第一個位置上的記錄序列中選擇關鍵碼最小(或最大)的記錄並將它與序列中的第二個記錄交換位置;如此重複,直到序列中只剩下一個記錄爲止。
代碼實現如下:
#include <stdio.h>
#define ARRAYSIZE 4
void swap(int *m, int *n)
{
*m = *m + *n;
*n = *m - *n;
*m = *m - *n;
}
void selectsort(int a[], int n)
{
int i, j, index;
for(i = 0; i < n-1; i++)
{
index = i;
for(j = i+1; j < n; j++)
if(a[index] >= a[j])
index = j;
if(i != index)
swap(&a[index], &a[i]);
}
}
void main()
{
int a[ARRAYSIZE], i;
printf("please input 4 numbers\n");
for(i = 0; i < ARRAYSIZE; i++)
scanf("%d", &a[i]);
/*insert sort*/
selectsort(a, ARRAYSIZE);
for(i = 0; i < ARRAYSIZE; i++)
printf("%d\n", a[i]);
}
這裏曾經錯過一次,在寫交換函數的時候,如果兩個數相等會出現錯誤,所以在交換前加了一句:
if( ! = index)
swap(&a[index], &a[i]);