首页 > 其他分享 ># issue 2 选择排序(Selection Sort)

# issue 2 选择排序(Selection Sort)

时间:2024-11-14 16:50:51浏览次数:3  
标签:Sort Selection int issue 复杂度 排序 data

目录

一、Selection Sort的基本思路

二、Selection Sort的各个复杂度

三、Selection Sort的实现

四、实验结果(输出结果)


一、Selection Sort的基本思路

通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小(最大)的记录,并和第i(1<=i<=n)个记录交换

嗯,说人话就是例如从第一个开始比较,把第一个和第二个比,如果第二个大则把第二个和第三个比,如果第一个大则把第一个和第三个比。目的就是找到最大(最小)的那一个元素,然后把他放和第一个位置的元素进行交换。

再简单一点就是找最大(最小)的把他往前面放

通过代码的实现我们可以发现,这跟冒泡排序很像。因为冒泡排序是把大(小)的往后面放,而这个选择排序则是把大(小)的往前面放。

二、Selection Sort的各个复杂度

平均时间复杂度:n^2

最坏时间复杂度:n^2

最好时间复杂度:n^2

空间复杂度:1

稳定性:不稳定

(选择排序不是稳定的排序算法。在选择排序过程中,可能会发生相同值元素位置的交换,这可能导致原始顺序中相等元素的相对顺序发生变化。)

三、Selection Sort的实现

#include "algorithm.h"

#define DEBUG

void Swap(int data[], int i, int j) {
	int temp=data[i];
    data[i] = data[j];
    data[j] = temp;

}

void SelectionSort(int data[], size_t size) {
	//从小到大
	int i, j, min;
	for (i = 0; i < size - 1; i++) {
		min = i;
		for (j = i+1; j < size; j++)
			if (data[j] < data[min]) {
				min = j;
			}
		Swap(data, i, min);
#ifdef DEBUG
        printf("第%2d次排序:", i+1);
		Show_data(data, size);
#endif
	}
}

void SelectionTest() {
	int data[] = { 12,5,2,9,7,13,7,11,1 };
	printf("排序前数组:");
	Show_data(data, sizeof(data) / sizeof(int));
	SelectionSort(data, sizeof(data) / sizeof(int));
	printf("排序后数组:");
	Show_data(data, sizeof(data) / sizeof(int));
}

int algorithm015() {
	SelectionTest();
	return 0;
}

Show_data()函数我在冒泡排序里实现了,就不贴出了。 

四、实验结果(输出结果)

这次我把每次挪动位置都打印了出来,相信可以帮助更好的理解它排序的原理

标签:Sort,Selection,int,issue,复杂度,排序,data
From: https://blog.csdn.net/weixin_46481335/article/details/143775380

相关文章

  • 深⼊理解指针(5)[回调函数、qsort相关知识(qsort可用于各种类型变量的排序)】
     目录1.回调函数2.qsort相关知识(qsort可用于各种类型变量的排序)一   回调函数    1定义/作用:把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数时,被调⽤的函数就是回调函数。回调函数不是由该函数的实现⽅......
  • FFmpeg Stream selection
    ffmpegprovidesthe-mapoptionformanualcontrolofstreamselectionineachoutputfile.Userscanskip-mapandletffmpegperformautomaticstreamselectionasdescribedbelow.The-vn/-an/-sn/-dnoptionscanbeusedtoskipinclusionofvideo,......
  • qsort使用和模拟
    我们先来了解一下qsort的如何使用,qsort也是一种排序,是快速排序quick sort使用qsort时要包含#include<stdlib.h>qsort的参数非常多,让我们来一一了解:voidqsort(void*base,//第一个参数,base指向的是待排序数组中首元素的地址size_tnum,//......
  • yolov8目标跟踪与行人车辆计数+YOLOv8 Object Detection with DeepSORT Tracking(ID +
    YOLOv8目标检测与DeepSORT跟踪技术简介在计算机视觉领域,目标检测和跟踪是两个至关重要的任务。目标检测旨在识别图像或视频中的特定对象,并确定它们的位置;而目标跟踪则是在连续的帧之间保持对这些对象的身份和位置的一致性跟踪。本文将详细介绍YOLOv8作为先进的目标检测算法......
  • group by | order by| distribute by| sort by| cluster by | partition by 的区别
    目录1、orderby 和groupby1.1、orderby:排序,属于全局排序1.2、goupby:分区2、distributeby、sortby、clusterby、partitionby2.1、distributeby:分组2.2、sortby: 强制排序2.3、partitionby:分组2.4、clusterby:(culsterby =distributeby......
  • WPF datagrid implement multi select via behavior selectionchanged event in MVVM
    <DataGridItemsSource="{BindingBooksCollection,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"CanUserAddRows="False"AutoGenerateColumns="False"SelectionMode="Extended">......
  • 论文概览 |《Urban Analytics and City Science》2024.09 Vol.51 Issue.7
    本次给大家整理的是《EnvironmentandPlanningB:UrbanAnalyticsandCityScience》杂志2024年9月第51卷第7期的论文的题目和摘要,一共包括20篇SCI论文!论文1Spatialinequalitiesandcities:Areview空间不平等与城市:综述【摘要】ThisspecialissueofEnvironm......
  • sort() 排序和qsort() 排序(超详细)
    目录前言一、qsort()是什么?1.核心代码:函数的原型参数含义:实际使用(一般只对qsor()函数进行微调)以整形数组进行演示2.其他类型比较一级排序二级排序多级排序二、sort()是什么?1.自动调用(从小到大)2.自定义调用一级排序多级排序三.sort()排序和qsort()排序的区别及各自特......
  • 数组排序简介-计数排序(Counting Sort)
    基本思想        通过统计数组中每个元素在数组中出现的次数,根据这些统计信息将数组元素有序的放置到正确位置,从而达到排序的目的。算法步骤计算排序范围:遍历数组,找出待排序序列中最大值元素 nums_max和最小值元素 nums_min,计算出排序范围为 nums_max−nums_min......
  • 数组排序简介-快速排序(Quick Sort)
    基本思想        采用经典的分治策略,选择数组中某个元素作为基准数,通过一趟排序将数组分为独立的两个子数组,一个子数组中所有元素值都比基准数小,另一个子数组中所有元素值都比基准数大。然后再按照同样的方式递归的对两个子数组分别进行快速排序,以达到整个数组有序。......