【算法】简单选择排序 O(n^2) 不稳定的 C语言
简单选择排序
一、算法描述
假设序列中有N个元素:
第1趟找到第1到N个元素之间最小的一个,与第1个元素进行交换
第2趟找到第2到N个元素之间最小的一个,与第2个元素进行交换
第3趟找到第3到N个元素之间最小的一个,与第3个元素进行交换
。
。
第m趟找到第m到N个元素之间最小的一个,与第m个元素进行交换
。
。
第N趟(最后一趟)找到第N到N个元素之间最小的一个(即最后一个元素),与第N个元素进行交换(无需交换)
即每次找到剩下无序序列中元素中最小的,与无序序列最前面的元素交换,逐渐形成第一个元素有序,第一到二个元素有序,第一到三个元素有序。。。。。。。全部元素有序
二、算法分析
有两层循环,共需作 n(n-1)/2 次比较,固时间复杂度为O(n^2)
且是不稳定的排序算法,空间复杂度为O(1)
无论序列怎样,都需完成N趟排序,所以最好、最坏和平均情况的执行时间是相同的
三、算法实现代码
定义顺序表代码:
typedef struct list {
int Size;//大小
int Elements[MaxSize];//用数组存放
}List;//定义顺序表
定义简单选择函数代码:
void Jiandanxuanze(List*lst)
{
int small;//存放最小元素下标
int i, j, temp;
for (i = 0; i<lst->Size - 1; i++)//最后一次无需执行,共执行Size-1次
{
small = i;
for (j = i + 1; j<lst->Size; j++)
{
if (lst->Elements[j]<lst->Elements[small])
small = j;//找到最小的元素的下标存在small,然后与i进行交换
}
temp = lst->Elements[i];
lst->Elements[i] = lst->Elements[small];
lst->Elements[small] = temp;//把最小的元素与最前的即i进行交换
}
}
四、实例测试代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MaxSize 99 typedef struct list {
int Size;//大小
int Elements[MaxSize];//用数组存放
}List;//定义顺序表 void Jiandanxuanze(List*lst);//函数声明 int main(void) {
List a;
int i;
srand((unsigned)time(NULL)); //随机数种子
a.Size = 10;//定义大小为10 for ( i = 0; i<10;i++)
{
a.Elements[i] = rand() % 10;//初始化顺序表
} printf("原表为:");
for (i = 0; i < 10;i++)
{
printf("%d ", a.Elements[i]);
}
printf("\n"); Jiandanxuanze(&a);//调用简单选择函数,修改值需传入地址 printf("简单选择排序后为:");
for (i = 0; i < 10; i++)
{
printf("%d ", a.Elements[i]);
}
getchar();
return 0;
} void Jiandanxuanze(List*lst)
{
int small;//存放最小元素下标
int i, j, temp;
for (i = 0; i<lst->Size - 1; i++)
{
small = i;
for (j = i + 1; j<lst->Size; j++)
{
if (lst->Elements[j]<lst->Elements[small])
small = j;//找到最小的元素的下标存在small
} temp = lst->Elements[i];
lst->Elements[i] = lst->Elements[small];
lst->Elements[small] = temp;//把最小的元素与最前的进行交换
}
}
【算法】简单选择排序 O(n^2) 不稳定的 C语言的更多相关文章
- 八大排序算法~简单选择排序【记录下标k变量的作用】
八大排序算法~简单选择排序[记录下标k变量的作用] 1,思想:打擂台法,数组中的前n-1个元素依次上擂台"装嫩",后边的元素一个挨着一个不服,一个一个上去换掉它 2,优化:通过记录 ...
- 排序系列 之 简单选择排序及其改进算法 —— Java实现
简单选择排序算法: 基本思想: 在待排序数据中,选出最小的一个数与第一个位置的数交换:然后在剩下的数中选出最小的数与第二个数交换:依次类推,直至循环到只剩下两个数进行比较为止. 实例: 0.初始状态 ...
- 常见排序算法总结:插入排序,希尔排序,冒泡排序,快速排序,简单选择排序以及java实现
今天来总结一下常用的内部排序算法.内部排序算法们需要掌握的知识点大概有:算法的原理,算法的编码实现,算法的时空复杂度的计算和记忆,何时出现最差时间复杂度,以及是否稳定,何时不稳定. 首先来总结下常用内 ...
- 八大排序算法之三选择排序—简单选择排序(Simple Selection Sort)
基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素 ...
- 简单选择排序算法的C++实现
简单选择排序采用最简单的选择方法,即在剩余序列中选出最小(或最大)的关键字,和剩余序列的第一个关键字交换位置,依次选择下去,直至使整个序列有序. 算法中两层循环的执行次数和初始序列没有关系,第二层循环 ...
- JAVA简单选择排序算法原理及实现
简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...
- [Swift]八大排序算法(三):选择排序 和 简单选择排序
排序分为内部排序和外部排序. 内部排序:是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存 ...
- 冒泡排序算法和简单选择排序算法的js实现
之前已经介绍过冒泡排序算法和简单选择排序算法和原理,现在有Js实现. 冒泡排序算法 let dat=[5, 8, 10, 3, 2, 18, 17, 9]; function bubbleSort(d ...
- Java排序算法(二):简单选择排序
[基本思想] 在要排序的一组数中.选出最小的一个数与第一个位置的数交换:然后在剩下的数中再找出最小的与第二个位置的数交换,如此循环至倒数第二个数和最后一个数比較为止. 算法关键:找到最小的那个数.并用 ...
随机推荐
- 杭电 1795 The least one
The least one Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- CentOS7.0分布式安装HADOOP 2.6.0笔记-转载的
三台虚拟机,IP地址通过路由器静态DHCP分配 (这样就无需设置host了). 三台机器信息如下 - 1. hadoop-a: 192.168.0.20 #master 2. ha ...
- SQL数据类型介绍
在计算机中数据有两种特征:类型和长度.所谓数据类型就是以数据的表现方式和存储方式来划分的数据的种类. 在SQL Server 中每个变量.参数.表达式等都有数据类型.系统提供的数据类型分为几大类 ...
- 接口作为参数,不同的接口调用不同的方法,例如:输出“I love Game”或输出“我喜欢游戏”
接口的思想:在于可以增加很多类都需要实现的功能.比如:各式各样的商品,可能隶属不同公司,但工商部门都必须具有显示商标的功能(实现同一接口).商标的具体制作由各个公司自己去实现. 给其他类去实现,不同的 ...
- Oracle char 查询问题
近期碰到一个问题,数据库有个字段设置类型是char(2),然后数据库保存的数据位1,当使用hibernate 查询时 我使用query.setString("permissionLevel& ...
- x264 编码器选项分析 (x264 Codec Strong and Weak Points) 1
文章文件夹: x264 编码器选项分析 (x264 Codec Strong and Weak Points) 1 x264 编码器选项分析 (x264 Codec Strong and Weak P ...
- spring mvc DispatcherServlet详解之二---request通过Controller获取ModelAndView过程
整个spring mvc的架构如下图所示: 上篇文件讲解了DispatcherServlet通过request获取控制器Controller的过程,现在来讲解DispatcherServletDisp ...
- 关于text-align无法居中的问题
昨天项目,一直出现一个无法居中的问题,最后发现竟然是text-align的问题,才发现自己对text-align的理解还是不够透彻,于是在此再举例分析下. css中的元素一共有三类:块元素.行内块和内 ...
- frame模型
#import "CZWeiboFrame.h" #import "CZWeibo.h" @implementation CZWeiboFrame #defin ...
- 【转载】ASP.NET支持多语言
ASP.NET 2.0中实现:1.使用工具自动生成本地化资源(LocalResources) 首先建立一个WEB工程,如图所示:双击Default.aspx,切换到[设计]视图,从工具箱里拖一个But ...