算法之選擇排序【C語言】

選擇排序

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


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章