您现在的位置是:首页 > 正文

简单选择排序

2024-02-01 00:15:57阅读 1

选择排序:
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。

思路分析:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define DATASIZE 10
/********************选择排序*******************************************
    基本思想:每一趟从待排序的记录中选出关键字最小的记录,
              按顺序放在已排序的记录序列的最后,直到排完为止。 
 
    思路分析:通过循环找到元素中最小的元素,然后把其放在开头,即与开头元素交换
            位置,接着从随后元素中找到最小的元素,然后放在开头元素的
            后面,即与第二个元素交换位置,接着重复上述操作直到进行到最后一个元素。            

 * *********************************************************************/
void SelectSort(int arr[])
{
    int i,j;
    int min;
    int temp;
    for(i = 0;i < DATASIZE; i++){
        min = i;
        for(j = i + 1; j < DATASIZE; j++){
            if(arr[j] < arr[min]) min = j; //存储最小元素的下标
        }
        //找到最小元素后,实现位置的互换,实际上是数据的交换
        temp = arr[i]; //备份前面的元素
        arr[i] = arr[min];//把最小的元素放在前面
        arr[min] = temp;//把前面的元素放在找到的最小元素的位置
    }
}

int main()
{
    srand(time(NULL));
    int arr[DATASIZE];
    
    printf("未排序之前的数列:");
    for (int i = 0; i < DATASIZE; i++)
    {
        arr[i] = rand()%100;
        printf("%-2d ",arr[i]);
    }
    printf("\n");

    SelectSort(arr);

    printf("已排序之后的数列:");
    for (int i = 0; i < DATASIZE; i++)
    {
        printf("%-2d ",arr[i]);
    }
    printf("\n");

}

网站文章

  • jdk8升级成jdk17报错 module java.base does not “opens java.lang“ to unnamed module @1941a8ff

    jdk8升级成jdk17报错 module java.base does not “opens java.lang“ to unnamed module @1941a8ff

    jdk8升级jdk17常见错误

    2024-02-01 00:15:48
  • 日志-apache的access_log与error_log 热门推荐

    日志-apache的access_log与error_log 热门推荐

    1. access_log 访问日志 access_log为访问日志,记录所有对apache服务器进行请求的访问,它的位置和内容由CustomLog指令控制,LogFormat指令可以用来简化该日志的内容和格式 2. error_log 错误日志 error_log为错误日志,记录下任何错误的处理请求,它的位置和内容由ErrorLog指令控制,通常服务器出现什么错误,首先对它进行查

    2024-02-01 00:15:42
  • Odrive打开报错 最新发布

    Traceback (most recent call last): File &quot;C:\Users\XLDWDS\AppData\Local\Temp\1m2eIZGTRxmt3FzYSWZ...

    2024-02-01 00:15:35
  • springboot整合minio上传文件

    springboot整合minio上传文件

    springboot整合minio上传文件

    2024-02-01 00:15:11
  • 2022年6月29日--使用C#迈出第一步--使用 C# 中的“if”、“else”和“else if”语句向代码添加决策逻辑

    C#

    2024-02-01 00:14:53
  • vue——filter过滤器

    vue——filter过滤器

    参数是10,显示是100效果如下:1、局部过滤器关键性代码2、全局过滤器附加:多个过滤器串联:{{ message | filterA | filterB }}说明:filterA被定义为接收单个参数的过滤器函数,表达式message的值将作为参数传入到函数中。然后继续调用同样被定义为接收单个参数的过滤器函数filterB,将filterA的结果传递到filterB中。...

    2024-02-01 00:14:46
  • C语言|深入浅出讲解int转换为float全过程(附2017年统考大题案例)

    C语言|深入浅出讲解int转换为float全过程(附2017年统考大题案例)

    int转换为float类型为什么会发生精度损失? 精度损失的详细过程究竟是什么样的? 什么样情况float会发生精度损失?没有弄懂2017年浮点数统考大题? 这一篇用2017年统考大题案例帮你更深的理解浮点数的存储规则。

    2024-02-01 00:14:15
  • [洛谷5464]缩小社交圈

    xx 转载于:https://www.cnblogs.com/lxzl/p/11233989.html

    2024-02-01 00:14:10
  • 交叉表查询(普通行列转换)

    问题:假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 李四 物理 94 想变成(得到如下结果): 姓名 语文 数学 物理 ---- ---- ---- ---- 李四 74  84  94 张三 74  83  93 ------------------

    2024-02-01 00:14:05
  • WIN32 API实现edit文本框的printf()函数

    在进行WIN32 API使用文本框编程时,很多情况下需要输出调试信息,或是直接输出一些有用的信息。我们通常使用SetWindowText()函数实现,但是其中的内容无法格式化修改,所以一般还要使用wsprintf()函数进行预格式化,最后还需要发送EM_SCROLL消息使滚动条显示到最下方,这就显得非常繁琐,往往要重复使用多次,失去了效率。修改之前的代码往往是这样的:GetLocalTi...

    2024-02-01 00:13:33