图解算法系列之选择排序(代码片段)

author author     2023-01-30     775

关键词:

选择排序

(1)算法描述

对于给定的一个线性空间,维护两个区域——“已排序区域”和“未排序区域”。遍历每一个元素,找出该元素后边所有元素中,比当前元素绝对值相差最大的元素,与该元素交换位置。

(2)算法图解

技术分享图片

void selectionSort(int arr[], int number);

CustomSort.cpp

#include "CustomSort.h"
void selectionSort(int arr[], int number) 
    // 将数组遍历一遍
    for (int i = 0; i < number; i++) 
        // 设定最小值所在的索引
        int minIndex = i;
       // 遍历一遍剩下的没有排序的元素
        for (int j = i + 1; j < number; j++) 
            // 如果这个元素比当前index的元素还要小,那么交换这个元素
            if (arr[j] < arr[minIndex]) 
                minIndex = j;
            
        
        swap(arr[i], arr[minIndex]);
    

(4)Java代码实现

public class SelectionSort 
    public static int[] sort(int[] arr, int number) 
        for (int i = 0; i < number; i++) 
            int minIndex = i;
            for (int j = i + 1; j < number; j++) 
                if (arr[j] < arr[minIndex]) 
                    int temp;
                    temp = arr[j];
                    arr[j] = arr[minIndex];
                    arr[minIndex] = temp;
                
            
        
        return arr;
    

(5)时间复杂度分析

第一个循环用于考察每个元素,第二个循环用于考察未排序的每个元素。即使最好的情况,也要进行以上两个遍历过程,因此时间复杂度是O(n^2)。

图解算法系列之冒泡排序(low版)(代码片段)

...。利用数学归纳法得知:N个元素总共比较N(N-1)次。(2)图解算法(3)C/C++代码实现Custom.hvoidBubbleSort(intarr[],intnumber);Custom.cppvoidBubbleSort(intarr[],intnumber)for(inti 查看详情

图解算法系列之希尔排序(代码片段)

希尔排序(1)算法描述对于给定的线性序列,将这个序列按照一定规则进行分组,每个小序列使用插入排序的方法排序。由于是每个分组进行排序,序列总体只是局部有序,全局还是无序的。因此全部的分组进行一次排序后,... 查看详情

图解算法系列之插入排序(low版)(代码片段)

...交换,直到不符合交换条件或者到达最前端。(2)算法图解(3)C/C++代码实现CustomSort.hvoidinsertionSort(intarr[],intnumber);CustomSort.cppvoidinsert 查看详情

图解算法系列之插入排序(优化版)(代码片段)

...贝出来的元素放到当前位置,否则继续向前比较。(2)图解算法(3)C/C++代码实现Custom.hvoidinsertionAdvancedSort(intarr[],intnumber);Custom 查看详情

图解算法系列之归并排序(代码片段)

...空,直接拷贝另一个没有被用完的元素到新空间。(2)图解算法归并排序的过程合并函数的合并过程(3)C/C++代码实现CustomSort.h//归并排序voidMergeSort(intarr[],intnumber);//内部的归并排序void__MergeSort(intarr[],intleft,intright);//内部合并voi... 查看详情

图解排序算法之3种简单排序(选择,冒泡,直接插入)(代码片段)

排序是数据处理中十分常见且核心的操作,虽说实际项目开发中很小几率会需要我们手动实现,毕竟每种语言的类库中都有n多种关于排序算法的实现。但是了解这些精妙的思想对我们还是大有裨益的。本文简单温习下最基础的... 查看详情

排序算法之冒泡选择插入排序(java)(代码片段)

...现具体代码的实现选择排序选择排序介绍和实现选择排序图解具体代码实现插入排序插入排序介绍和实现插入排序图解具体代码实现通过Java实现冒泡、选择、插入排序算法排序也称排序算法(SortAlgorithm),排序是将一组数据&#x... 查看详情

图解排序算法之3种简单排序(选择,冒泡,直接插入)(代码片段)

  排序是数据处理中十分常见且核心的操作,虽说实际项目开发中很小几率会需要我们手动实现,毕竟每种语言的类库中都有n多种关于排序算法的实现。但是了解这些精妙的思想对我们还是大有裨益的。本文简单温习... 查看详情

浙江高考vb之排序系列(代码片段)

浙江信息技术Giao考之"排序系列"在浙江高考中,排序算法是一个大头,下至冒泡选择,上至桶排索引.这里我们大致梳理一遍高考可能考到的排序算法.排序算法有哪些?在算法中排序(sort)有很多算法:冒泡排序(BubbleSort)选择排序(Se... 查看详情

图解排序算法之堆排序(代码片段)

堆排序  堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆  堆是具有以下性质的完全二叉树:每... 查看详情

图解排序算法之堆排序(代码片段)

预备知识堆排序  堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆  堆是具有... 查看详情

算法图解之快速排序(代码片段)

快速排序比选择排序要快得多,采用分而治之的思想,具体实现是用递归。1.基线条件数组为空或只包含一个元素2.递归条件将数组分解,直到满足基线条件3.工作原理先从数组中选择一个元素,这个元素我们称之为基准值(pivot)... 查看详情

图解排序算法之希尔排序(代码片段)

...同时该算法是冲破O(n2)的第一批算法之一。本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现。基本思想  希尔排序是把记录按下标的一定增量 查看详情

❤️死磕排序系列之「选择排序」❤️(建议排序)(代码片段)

...释义二、🧡核心思想三、🔆动图演示四、🌳算法前置五、🥦算法描述六、🧶算法分析七、🧢优化方案八、💙源码详解九、💗代码验证零、📃前言  这个系列的文章中,我 查看详情

c++不知算法系列之排序从玩转冒泡算法开始(代码片段)

...购买数量等排序,便于使用者快速找到数据。常见的排序算法分为两大类:比较类:通过比较决定元素间的相对次序,因其时间复杂度不能突破O(nlogn),也称为非线性时间比较类排序。具体又可分:类型名称交换类冒泡排序、快... 查看详情

图解排序算法之归并排序(代码片段)

基本思想  归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在... 查看详情

图解排序算法之归并排序(代码片段)

基本思想  归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的... 查看详情

算法系列之--javascript和kotlin的选择算法(原)(代码片段)

上一节我们学习了冒泡算法,这一节来学习选择算法,算法系列文章目录在这里。介绍    选择排序与冒泡类似,都是入门级的排序算法,效率也与冒泡相同,都是O(n^2),算法步骤如下:    1.寻找... 查看详情