選擇排序
思想:在一組數據中,遍歷並找到最小(大)值,與第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;
}