选择排序大体思路是找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。其次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。选择排序的算法效率不是很高,时间复杂度O(n2) ,空间复杂度:O(1) 。
一、声明选择排序函数
cpp
#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
二、定义选择排序函数
cpp
#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);
}
三、测试排序结果
cpp
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);
}