算法之选择排序【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;
 }


 

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