选择排序大体思路是找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。其次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。选择排序的算法效率不是很高,时间复杂度O(n2) ,空间复杂度:O(1) 。
一、声明选择排序函数
#ifndef _ALG_H
#define _ALG_H
#include <stdlib.h>
#include <stdio.h>typedef unsigned int DataField;void show_data(DataField* data,int len);/***选择排序
*/
void select_sort(DataField* data, int len);#endif
二、定义选择排序函数
#include "alg.h"void show_data(DataField *data, int len)
{printf("-----------------\n");int i = 0;for (i; i < len; i++){printf("%d\t",*(data+i));}printf("\n");
}void select_sort(DataField* data, int len)
{int i = 0;for (i; i < len - 1; i++){int min = i;int j;/// 每一轮循环找出剩余元素的最小值for (j = i + 1; j < len; j++){min = *(data + min) > *(data + j) ? j : min;}/// 将当前找到的最小值放到第i个元素的位置DataField temp = *(data + min);*(data + min) = *(data + i);*(data + i) = temp;}show_data(data,len);
}
三、测试排序结果
void (*funPtr)(DataField*,int);int main()
{DataField arr[] ={ 19,29,49,69,99,39,9,79,89 };DataField* data = &arr[0];int len = sizeof(arr)/sizeof(DataField);funPtr = &select_sort;(*funPtr)(data,len);while (1) {}///getchar()exit(0);
}