选择排序很简单,基本思想如下:
从待排序的记录序列中选择关键码最小(或最大)的记录并将它与序列中的第一个记录交换位置;然后从不包括第一个位置上的记录序列中选择关键码最小(或最大)的记录并将它与序列中的第二个记录交换位置;如此重复,直到序列中只剩下一个记录为止。
代码实现如下:
#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]);