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


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值