#include <stdio.h> #define T 1 #define F 0 #define MAXSIZE 10 //要排序数组个数的最大值 typedef struct { int r[MAXSIZE + 1]; //存储要排序数组,r[0]用作哨兵或临时变量 int length; }SqList; void swap(SqList *L, int i, int j) { int temp = L->r[i]; L->r[i] = L->r[j]; L->r[j] = temp; } void selectSort(SqList *L) { int i, j, min; for (i = 1; i < L->length; i++) //排好前length-1个,最后一个就不需要排了 所以是 < { min = i; //将当前下标定义为最小值下标 for (j = i+1; j <= L->length; j++) { if (L->r[min] > L->r[j]) { min = j; } } if (min != i) { swap(L, min, i); } } } int main() { int i; SqList L; L.length = 10; for (i = 1; i < L.length+1; i++) { L.r[i] = i; } L.r[5] = 100; L.r[7] = 90; for (i = 1; i < L.length+1; i++) { printf("%d ", L.r[i]); } selectSort(&L); printf("\n"); for (i = 1; i < L.length+1; i++) { printf("%d ", L.r[i]); } printf("\n"); return 0; }
运行结果:
简单表示方法:
#include <stdio.h> void swap(int *i, int *j) { int temp = *i; *i = *j; *j = temp; } int main() { int a[10] = {2,1,4,5,6,9,7,8,7,7}; int i,j,min; for (i = 0; i < 10; i++) { min = i; for (j = i+1; j < 10; j++) { if (a[min] > a[j]) { min = j;//每次遍历找到最小的下标 } } if (min != i) { swap(&a[i], &a[min]); } } for (i = 0; i < 10; i++) { printf("%d\n", a[i]); } return 0; }
运行结果: