八大排序算法(四) 直接选择排序
代码:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define SIZE 10
int n[SIZE];
void init(int n[], int len){
int i;
srand((unsigned)time(NULL));
for (i=0; i<len; i++){
n[i] = rand()%10+1;
}
}
void printout(int n[], int len){
int i;
for (i=0; i<len; i++){
printf("%d ", n[i]);
}
printf("\n");
}
void DirectSelectSort(int n[], int len){
int i, j, k;
int tmp;
// 这里使用len - 1 因为在最后的时候, 最后一个数字以经是一个排好序的状态
for (i=0; i<len-1; i++){
k = i;
tmp = n[i];
for (j=i+1; j<len;j++)
if (tmp > n[j]) k = j;
if ( i != k){
// 两数交换
n[i] = n[i] ^ n[k];
n[k] = n[i] ^ n[k];
n[i] = n[i] ^ n[k];
}
}
}
int main(){
init(n, SIZE);
printout(n, SIZE);
DirectSelectSort(n, SIZE);
printout(n, SIZE);
return 0;
}
运行图: