当前位置: 首页 > wzjs >正文

免费移动网站模板线上推广方式都有哪些

免费移动网站模板,线上推广方式都有哪些,360建筑网会员,wordpress网店模板制作时间复杂度:O(n) —— 无论数据初始排列如何,都需要进行n(n-1)/2次比较空间 复杂度:O(1) —— 原地排序,不需要额外存储空间 稳定性:不稳定排序(可能改变相同元素的相对位置) 适用场景&#xff…

时间复杂度:O(n²) —— 无论数据初始排列如何,都需要进行n(n-1)/2次比较空间

复杂度:O(1) —— 原地排序,不需要额外存储空间

稳定性:不稳定排序(可能改变相同元素的相对位置)

适用场景:小规模数据排序,或对内存使用要求严格的场景


前言

一、算法概述

选择排序(Selection Sort)是一种简单直观的排序算法,其基本思想是:每次从未排序的部分中选择最小(或最大)的元素,放到已排序部分的末尾。这种排序方式因其工作原理类似于人们打扑克牌时整理手牌的方式,也被称为"直接选择排序"。

二、算法原理

假设我们要对数组 [64, 25, 12, 22, 11] 进行升序排序

[64, 25, 12, 22, 11]
第1轮:找到最小值11,与第1位64交换
-> [11, 25, 12, 22, 64]
第2轮:从剩余元素中找到最小值12,与第2位25交换
-> [11, 12, 25, 22, 64]
第3轮:从剩余元素中找到最小值22,与第3位25交换
-> [11, 12, 22, 25, 64]
第4轮:从剩余元素中找到最小值25,已在正确位置
-> [11, 12, 22, 25, 64]
排序完成!
  1. 初始状态:整个数组为未排序部分,已排序部分为空。第1轮:遍历整个数组,找到最小元素的下标(假设为 min_index)。将 min_index 的元素与第1个元素交换。此时,前1个元素为已排序部分。第2轮:遍历剩余未排序部分(从第2个元素到末尾),找到最小元素的下标。将最小元素与第2个元素交换。此时,前2个元素为已排序部分。重复上述步骤,直到未排序部分只剩1个元素(此时数组已完全有序)

#include <stdio.h>// 选择排序函数
void selectionSort(int arr[], int n) {// 外层循环控制分界点移动(i即为分界点)for (int i = 0; i < n - 1; i++) {// 初始化最小值索引为当前分界点位置int minIndex = i;// 内层循环:在未排序区间寻找最小值for (int j = i + 1; j < n; j++) {// 发现更小元素,更新最小值索引if (arr[j] < arr[minIndex]) {minIndex = j;}}// 交换操作:将最小值放到分界点位置if (minIndex != i) {  // 避免不必要的交换int temp = arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;}}
}
int main() {int arr[] = {64, 25, 12, 22, 11};int size = sizeof(arr) / sizeof(arr[0]);printf("原始数组: ");for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}printf("\n");selectionSort(arr, size);printf("排序结果: ");for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}return 0;
}

初始数组[64, 25, 12, 22, 11]

第1轮:目标:在未排序部分(全部)找到最小值,放到首位。查找最小值:遍历 [64, 25, 12, 22, 11],发现最小值是 11(下标4)。交换:64(首位)和 11 交换。结果:[11, 25, 12, 22, 64](已排序部分:[11],未排序部分:[25, 12, 22, 64]第2轮:目标:在剩余未排序部分 [25, 12, 22, 64] 找最小值,放到已排序末尾(即第2位)。查找最小值:遍历 [25, 12, 22, 64],最小值是 12(下标2)。交换:25(第2位)和 12 交换。结果:[11, 12, 25, 22, 64](已排序部分:[11, 12],未排序部分:[25, 22, 64]第3轮:目标:在 [25, 22, 64] 中找最小值,放到第3位。查找最小值:最小值是 22(下标3)。交换:25(第3位)和 22 交换。结果:[11, 12, 22, 25, 64](已排序部分:[11, 12, 22],未排序部分:[25, 64]第4轮:目标:在 [25, 64] 中找最小值,放到第4位。查找最小值:最小值是 25,已在正确位置(无需交换)。结果:[11, 12, 22, 25, 64](排序完成!)

三. 针对部分有序数组的优化

void SelectionSort(int arr[], int n) {for (int i = 0; i < n-1; i++) {int minIndex = i;int isSorted = 1;for (int j = i+1; j < n; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}if (arr[j] < arr[j-1]) {isSorted = 0;}}if (isSorted) break;  // 剩余部分已有序if (minIndex != i) {swap(&arr[i], &arr[minIndex]);}}
}

这里的函数做了优化对于如果是【3,1,2,7】它的话第一次进入和之前一样找到最小的交换加的这个if是用来判断数组是否有序如果有序就会为1这样的话就节省了循环的次数以便于程序的进行

这个选择排序在实践中特别适用于:数据量不大但可能部分有序的场景需要保证最坏情况下仍能完成排序的场合

四、常见问题

  1. 为什么选择排序是不稳定的?示例:排序 [5, 8, 5, 2, 9],第一个5会与2交换,导致两个5的相对顺序改变

  2. 选择排序和冒泡排序的主要区别是什么?选择排序每轮只进行一次交换,而冒泡排序可能进行多次交换选择排序的比较次数固定为O(n²),而最好情况下冒泡排序只需O(n)次比较


总结

选择排序是一种简单直观的原地排序算法,通过反复选取未排序部分的最小元素放到已排序末尾来完成排序。其主要特点包括:

时间复杂度始终为O(n²),比较次数固定为n(n-1)/2次空间复杂度O(1),是原地排序算法交换次数仅需O(n)次,适合元素移动成本高的场景不稳定排序,可能改变相等元素的相对位置性能与输入数据状态无关,适合小规模数据排序

算法优势在于实现简单、内存效率高,虽然在大数据量时效率较低,但仍是理解排序算法基础原理的经典案例。优化版本如双向选择排序可以进一步提升性能。

http://www.dtcms.com/wzjs/258467.html

相关文章:

  • 精品网站建设需要多少钱seo网站诊断方案
  • php可以做动态网站吗如何做好互联网营销推广
  • 做网站的公司风云榜百度
  • 网站建设服务合同交印花税吗自贡网站seo
  • 自己建设购物网站线上营销培训
  • 网站建设 东八区百度投流
  • cms建站系统 java搜索引擎网络排名
  • 偷拍男女宾馆做爰网站网络广告的特点
  • 网站做闪电电磁沈阳seo公司
  • 阳江市建设路龙源学校网站学生制作个人网站
  • 做自己头像的网站seo整站优化更能准确获得客户
  • 网站空间哪个比较好每日一则小新闻
  • 石家庄网站制作如何推广一个品牌
  • 好的手机网站建设公司seo推广代理
  • 做网站 有哪些问题seo网站推广推荐
  • 专门做试卷的网站网站是如何建立的
  • 知名的wordpress网站友情链接交易平台
  • 旅游网站怎么做企业培训课程设置
  • 微信授权登录网站退出怎么做友情链接检测的特点
  • 橙子网站建设怎样在百度做广告宣传
  • 柳州做网站价格制作自己的网站
  • 创建网站的方案今日小说百度搜索风云榜
  • word可以做招聘网站吗杭州百度快照优化排名推广
  • 网页价格专业搜索引擎seo服务商
  • 网站建设先进个人总结短网址链接生成
  • 高端网站建设免费分析网站seo什么意思
  • 网站开发项目责任分配矩阵南宁seo优化公司排名
  • app网站模板下载免费开店的电商平台
  • 建筑设计是干嘛的来客seo
  • 厦门优秀网站建设常州百度关键词优化