【经典算法】直接选择排序

 

直接选择排序

数组分成有序区和无序区,初始时整个数组都是无序区,然后每次从无序区选一个最小的元素直接放到有序区的最后,直到整个数组变有序区。

选择排序的步骤是这样的:

首先,找到数组中最小的元素,将它和数组的第一个元素交换位置。

第二步,在剩下的元素中继续寻找最小的元素,和数组的第二个元素交换位置。

如此循环,直到整个数组排序完成。

复制代码
#include <stdio.h>

    int main () {
    int list[15] = {5,23,86,21,43,67,45,34,58,23,102,123,11,22,1};
    int i, j, temp,min;
    for(i = 0; i< 15;i++)
    {
        //令最小值等于无序区的第一个值
        min = list[i];
        temp = i;
        //找到无序区的最小值
        for(j = i; j<15;j++)
        {
            if(min>list[j])
            {   
                temp = j;
                min = list[j];
            }
            
        }
        //交换
        list[temp] = list[i];
        list[i] = min;
        temp = 0;
        
    }
    for (i = 0;i < 15; i++)
        printf("%d\n",list[i]);
}
复制代码

 

 

图解选择排序

我们以[ 8,2,5,9,7 ]这组数字做例子。

第一次选择,先找到数组中最小的数字 2 ,然后和第一个数字交换位置。(如果第一个数字就是最小值,那么自己和自己交换位置,也可以不做处理,就是一个 if 的事情)

 

 

 

第二次选择,由于数组第一个位置已经是有序的,所以只需要查找剩余位置,找到其中最小的数字5,然后和数组第二个位置的元素交换。

 

 

第三次选择,找到最小值 7 ,和第三个位置的元素交换位置。

 

 

第四次选择,找到最小值8,和第四个位置的元素交换位置。

 

 

最后一个到达了数组末尾,没有可对比的元素,结束选择。

如此整个数组就排序完成了。

 

参考:https://mp.weixin.qq.com/s/D0-lOLFkfppTnvN9yK_lBg

posted @   -零  阅读(2696)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2018-12-29 python的pickle和shelve模块
点击右上角即可分享
微信分享提示