首页 > 其他分享 >数据结构学习笔记-简单选择排序

数据结构学习笔记-简单选择排序

时间:2024-06-04 19:11:39浏览次数:14  
标签:minIndex arr 排序 迭代 int 笔记 数据结构 size

简单选择排序的算法设计与分析

问题描述:设计并分析简单选择排序

【算法设计思想】

迭代选择: 算法通过循环遍历数组,进行 size 次迭代。

最小值选择: 在每次迭代 (i) 中,算法致力于找到未排序子数组 (arr[i] 到 arr[size-1]) 内最小元素的索引。这个最小元素将被选出来进行交换。

交换: 一旦最小元素的索引 (minIndex) 被确定,它就会与当前索引 (i) 处的元素进行交换。这实际上将最小元素放置在未排序子数组开头的正确排序位置。

渐进排序: 每次迭代,排序子数组都会增长一个元素,最终导致整个数组在循环结束时按升序排序。

【算法描述】

void selectionSort(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        int minIndex = i;
        for (int j = i + 1; j < size; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        swap(arr[i], arr[minIndex]);
    }
}

【完整的测试程序】

#include <iostream>
using namespace std;

void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

void selectionSort(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        int minIndex = i;
        for (int j = i + 1; j < size; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        swap(arr[i], arr[minIndex]);
    }
}

int main(int argc, char const *argv[]) {
    int arr[6] = {1, 2, 3, 5, 3, 2};
    int size = sizeof(arr) / sizeof(arr[0]);
    selectionSort(arr, size);
    printArray(arr, size);
    return 0;
}

标签:minIndex,arr,排序,迭代,int,笔记,数据结构,size
From: https://www.cnblogs.com/zeta186012/p/18231530

相关文章

  • 05-Excel基础操作-学习笔记
    使用分列工具整理数据导出的数据是文本文件即以.txt结尾的文件,放入Excel中,是一种常见的操作。具体操作打开文本格式的数据,Ctrl+A全选——Ctrl+C复制——新建excel表格——点击A1单元格(注意,这里不要双击)——Ctrl+V粘贴——选中A列——数据选项卡——分列——勾选“分隔符号(D)”......
  • 网络技术零基础小白入门课程-深信服内部课程 笔记
    02-家庭组网介绍:Q:交换机比路由器速度更快,为什么还比路由器便宜?A:交换机工作在数据链路层,而路由器工作在网络层,因此路由器软件逻辑、硬件成本更高。 03-衡量网络性能的指标Q:在线用户、并发连接用户的概念一样吗?A:不一样,在线用户是已经访问网站的,并发连接数则是与网站进......
  • 12- Redis 中的 链表 数据结构
    Redis的List对象的底层实现之一就是链表。C语言本身没有链表这个数据结构,所以Redis自己设计了一个链表数据结构。1.链表节点结构设计先来看看【链表节点】结构的样子:typedefstructlistNode{  //前置节点  structlistNode*prev;  //后置节点 ......
  • 数据结构:树
    树,是一种数据结构,就像这样:这就是一棵二叉树,也就是最多有两个分支的树,这些圆圈就是树的节点,下面讲一下节点间的关系:1、最上面的那个节点叫根节点2、每一个节点的上面的连着的节点称作这个节点的父节点,根节点没有父节点。3、每一个节点连着的下面的节点称作这个节点的子节点......
  • 英语学习笔记31——Where‘s Sally?
    Where’sSally?Sally在哪?词汇Vocabularygarden/ˈɡɑːrdn/n.花园,院子(属于私人)区别:parkn.公园(公共的)例句:我的花园非常大。Mygardenisverybig.搭配:YellowStonePark黄石公园under/ˈʌndər/prep.在……下面(介词)tree/triː/n.树复数:tree......
  • 《现代操作系统》第4章读书笔记
    《现代操作系统》第4章读书笔记就像操作系统提取处理器的概念来建立进程的抽象,以及提取物理存储器的概念来建立进程地址空间的抽象那样,我们可以用一个新的抽象——文件来解决这些问题。进程、地址空间和文件,这些抽象概念均是操作系统中最重要的概念。文件是对磁盘的建模,而非对RA......
  • Qt中的多线程与线程池浅析+实例----冒泡排序和快速排序
    转自:https://www.cnblogs.com/wanghongyang/p/14902679.html今天学习了Qt中的多线程和线程池,特写这篇博客来记录一下2|02.多线程2|12.1线程类QThreadQt中提供了一个线程类,通过这个类就可以创建子线程了,Qt中一共提供了两种创建子线程的方式,先看一下这个类中提供的一些常用......
  • Elixir学习笔记——第一章
    本指南将向您介绍Elixir基础知识-语言语法、如何定义模块、语言中的常见数据结构等。本章将重点介绍如何确保安装了Elixir,以及您可以成功运行Elixir的交互式Shell(称为IEx)。安装如果您尚未安装Elixir,请访问我们的安装页面。完成后,您可以运行elixir--version以获......
  • 数据结构与算法-图
    图是由顶点(vertex)和边(edge)组成的一种数据结构。顶点代表图中的节点,边代表节点之间的关系。图可以分为有向图(directedgraph)和无向图(undirectedgraph)。有向图中的边有一个方向,而无向图中的边没有方向。常见的图算法包括广度优先搜索(BFS)、深度优先搜索(DFS)、拓扑排序(topologica......
  • WQS二分 学习笔记
    问题引入前置问题:把长度为\(n\)的正整数序列分为若干段,一段代价为这段和的平方加一个常数\(c\),求最小代价。设\(f_i\)表示考虑前\(i\)个数且最后一段结尾为\(i\)的代价,答案为\(f_n\),\(f_i=\max_{j=0}^{i-1}\{f_j+(s_i-s_j)^2+c\}\),可以斜率优化,时间复杂度\(O(n)\)......