C语言-选择排序(Selection Sort)

news/2024/5/19 4:57:33 标签: 堆排序, 排序算法, c语言, 算法

1.简单选择排序(Simple Selection Sort)

- 基本思想:

- 算法

简单选择排序1.0

void SimpleSelectionSort(int *r,int n)
{
	int i,j;
	int min;
	
	for(i=0;i<n;i++)
	{
		min=i;
		for(j=i+1;j<n;j++)
		{
			if(r[j]<r[min])
			{
				min=j;
			}
		} 
		
		if(min!=i)
		{
			//Swap(r[min],r[i]);  
		}
	}
}

2.升级版:树形选择排序(Tree Selection Sort)

- 算法思想:

3.再升级:堆排序(HeapSort)

- 算法思想:

- 算法

堆排序1.0(非递归)

void heapify(int *r,int k,int end) //k~end为调整的范围 
{
	int i=k; //i为待处理结点 
	int j=2*i; //j为i的左孩子 
	int temp; //用于交换的临时存储空间 
	
	while(j<=end)
	{
		//让指针j选出左、右孩子中较大者 
		if(j<end&&r[j]<r[j+1]) //"j<end"表示i还有右孩子 ,若右孩子大,则让指针j指向右孩子// 
		{
			j++; 
		}
		
		//根节点与左、右孩子中的较大者 进行比较,进一步筛选出较大者,并将其换到根节点的位置上去 
		if(r[i]<r[j])
		{
			//Swap(r[i],r[j]);
			temp=r[i];
			r[i]=r[j];
			r[j]=temp;
		}
		
		//若发生了,则可能需要对其孩子进行二次调整 
		i=j;
		j=2*i;  
	} 	
}

void heapSort(int *r,int n)
{
	int k;
	int temp;
	
	//构建堆:由下至上 (由第一个非叶子结点开始) 
	for(k=n/2;k>=1;k--)
	{
		heapify(r,k,n);
	}
	
	//调整堆:由上至下 
	for(k=1;k<n;k++)
	{
		//移走堆顶元素 
		temp=r[1];
		r[1]=r[n-k+1];
		r[n-k+1]=temp;
		
		//调整堆 
		heapify(r,1,n-k);
	}
} 
堆排序2.0(递归)

- 复杂度分析:


参考:


http://www.niftyadmin.cn/n/1712715.html

相关文章

flutter 生成文档_2020年为什么选择Flutter?

作者 | Kenneth Reilly 译者 | 王强 策划 | 小智 Flutter 是什么&#xff1f; Flutter 是来自谷歌的一个出色的跨平台框架&#xff0c;可用来为移动、桌面和 Web 平台构建应用程序。它于 2018 年 12 月正式发布&#xff0c;仅用了不到一年的时间就在 GitHub 和 StackOverflow 上…

Unity基础篇:使UI跟随屏幕分辨率变化自适应。

当我们使用Unity的UGUI设计游戏UI的时候&#xff0c;不得不考虑在不同分辨率机器下UI的缩放以及位置的自适应。今天我们就来讨论一下这个问题。 首先我们来了解一下相机的渲染模式&#xff08;这个蓝蓝的东西好像可以点唉&#xff09;和Canvas下的Canvas Scaler 一、Constant…

横向遍历_Java数据结构和算法(四)图的广度优先遍历算法,附代码(BFS)

上一篇文章跟大家讲了图的深度优先遍历算法&#xff0c;今天跟大家分享一下图的广度优先遍历&#xff0c;图的广度优先搜索(BFS)类似于一个分层搜索的过程&#xff0c;广度优先遍历需要使用一个队列用以保存访问过的结点的顺序&#xff0c;一边按照这个顺序来访问这些结点的邻接…

Unity基础篇:协程(协同程序)的概括(StartCoroutine 和yield return和StopCoroutine )

MonoBehaviour.StartCoroutine 开始协同程序 public Coroutine StartCoroutine(IEnumerator routine); 一个协同程序在执行过程中,可以在任意位置使用yield语句。yield的返回值控制何时恢复协同程序向下执行。协同程序在对象自有帧执行过程中堪称优秀。协同程序在性能上没有更…

MySQL学习基础篇(八)---聚合函数

MySQL学习基础篇(八)—聚合函数 聚合&#xff08;或聚集、分组&#xff09;函数&#xff0c;它是对一组数据进行汇总的函数&#xff0c;输入的是一组数据的集合&#xff0c;输出的是单个值。 1. 聚合函数介绍 什么是聚合函数&#xff1a;聚合函数作用于一组数据&#xff0c;…

oracle取时间的小时_Oracle埃里森炮轰亚马逊,AWS提前去O

导读&#xff1a;埃里森是个传奇大佬&#xff0c;也是性情中人&#xff0c;他不断的发出言论表现岐视AWS的云系统&#xff0c;认为其离不开甲骨文。而亚马逊原计划2020年移除Oracle的决定却也提前了。Oracle 总裁Larry Ellison 曾经说过这么几段话&#xff1a; "让我告诉你…

Unity基础篇: UGUI中的Slider,Scrollbar总结与区分。

Slider&#xff08;滑动条&#xff09;&#xff1a;是一个主要用于形象的拖动以改变目标值的控件&#xff0c;他的最恰当应用是用来改变一个数值&#xff0c;最大值和最小值自定义&#xff0c;拖动滑块可在此之间改变&#xff0c;例如改变声音大小。 Scrollbar&#xff08;滚动…

电脑总是黑屏休眠_开机黑屏别担心 电脑小匠来帮您——常见的开机黑屏问题解决方法...

大家好&#xff0c;这里是匠哥。在日常使用电脑的过程中&#xff0c;大家可能会遇到一些比较玄学的问题&#xff0c;比如今天给大家介绍的电脑开机黑屏问题&#xff0c;接下来&#xff0c;匠哥会给大家分类讲解一下这些问题的解决方法&#xff0c;希望可以帮助到各位小伙伴。类…