选择排序
思想:在一组数据中,遍历并找到最小(大)值,与第0位交换,然后从第1位开始遍历,找到次小(大)值,与第1位交换,以此类推,直到数据按照一定顺序排列。
循环不定式:
初始化:把第0位当作最小值,遍历第1位至数组末尾,找到最小值,与第0位交换;
保持:把第n位当作从n开始到数组末尾的最小值,遍历第n+1位至数组末尾,找到最小值,与第n位交换;
终止:直到遍历到数组末尾。
时间复杂度:O(n2)
代码如下:
#include <stdio.h>
#define MAXSIZE 10
void select_sort(int array[]);
/**
* 选择排序,从小到大排序
*/
void select_sort(int array[])
{
int index;//索引,当前要存储最小值的位置
int tmp_index;//索引,当前遍历值的位置
int small_index;//索引,当前遍历值中最小值的位置
int small_value;//当前范围内的最小值
index = 0;
while(index < MAXSIZE)//存储最小值的位置要小于数组个数,当位置等于索引个数时,说明排序完毕
{
small_value = array[index];//当前位置的值作为最小值
small_index = index;
tmp_index = index + 1;//从当前位置的下一个位置开始遍历,直到数组最后一个元素
while(tmp_index < MAXSIZE)
{
if(small_value > array[tmp_index])//在当前范围内,查找最小值及其位置
{
small_value = array[tmp_index];
small_index = tmp_index;
}
tmp_index ++;
}
if(small_index != index)//如果找到比当前位置的值更小的值,更换当前位置的值与最小值调换
{
array[small_index] = array[index];
array[index] = small_value;
}
index ++;
}
}
/**
* 主程序
*/
int main()
{
int array[MAXSIZE] = {4,-2,2,0,-1,3,5,1,4,7};//待排序的数组
int index = 0;//索引
//打印原有数组
printf("Oringin array: ");
while(index < MAXSIZE)
{
printf("%d ",array[index]);
index++;
}
printf("\n");
//排序
select_sort(array);
//打印排序后数组
index = 0;
printf("Sort array: ");
while(index < MAXSIZE)
{
printf("%d ",array[index]);
index++;
}
printf("\n");
return 0;
}