4.选择排序

一、思想

代码:

二、时间复杂度:

看似其时间复杂度就是一个for循环的大O(N),但实际上每次进行扫描最小元的时候都要做一次for循环,所以其时间复杂度是俩嵌套一起的for循环,故此其时间复杂度是:

但是,每次扫描最小元,每次取的都是最小元?怎么快速找到最小元呢?我们可以利用树中的最小堆来优化这个选择排序!这也就是堆排序的由来。

三、代码实现:

cpp 复制代码
#include<stdio.h>
typedef int ElementType;
int ScanForMin(ElementType A[],int i,int N){
	int j,MinPosition;
	MinPosition = i;
	for(j=i;j<=N;j++){
		if(A[j]<A[MinPosition]){
			MinPosition = j;
		}
	}
	return MinPosition;
} 
void Swap(ElementType* x,ElementType* y){
	ElementType temp = *x;
	*x = *y;
	*y = temp;
} 
void display(ElementType x[]){
	int i;
	for(i=0;i<10;i++){
		printf("%d\t",x[i]);
	}
}
void Selection_Sort(ElementType A[],int N)
{
	int i,MinPosition;
	for(i=0;i<N;i++){
		MinPosition = ScanForMin(A,i,N-1);//从A[i]到A[N-1]寻找最小元位置赋给MinPosition 
		Swap(&A[i],&A[MinPosition]);//将未排序部分的最小元放到有序部分的最后位置 
		display(A);
		printf("\n");
	}
}
int main(){
	ElementType A[10] = {9,8,7,6,5,4,3,2,1,0};
	display(A);
	printf("\n");
	Selection_Sort(A,10);
	return 0;
}
相关推荐
云闲不收13 分钟前
各个语言对不同数据结构的叫法
数据结构
Y1nhl21 分钟前
Pyspark学习二:快速入门基本数据结构
大数据·数据结构·python·学习·算法·hdfs·pyspark
丁总学Java1 小时前
Spring Data JPA中的List底层:深入解析ArrayList的奥秘!!!
数据结构·数据库·list
丶Darling.1 小时前
Day82 | 灵神 | 快慢指针 重排链表
数据结构·链表
对方正在长头发丿3 小时前
棋盘问题(DFS)
数据结构·c++·算法·蓝桥杯·深度优先
阳洞洞4 小时前
二叉树的层序遍历
数据结构·算法·leetcode·二叉树遍历·广度优先搜索
今天也要早睡早起4 小时前
代码随想录算法训练营Day32| 完全背包问题(二维数组 & 滚动数组)、LeetCode 518 零钱兑换 II、377 组合总数 IV、爬楼梯(进阶)
数据结构·c++·算法·leetcode·动态规划·完全背包
字节旅行者4 小时前
C++中如何使用STL中的list定义一个双向链表,并且实现增、删、改、查操作
开发语言·数据结构·c++·链表
LLLLLindream4 小时前
数据结构之链表
数据结构·链表
用手码出世界4 小时前
二叉树——队列bfs专题
数据结构·算法·宽度优先