选择类排序总结

选择类排序总结

所谓选择类排序的思想就是:从数组的中选出最大或最小的,通过多次选择最后达到排序的目的

首先是简单选择排序

思想:每趟扫描中,选出最小的数字放在最前面,然后从第二个数字开始扫描,直到只剩下最后一个数不需要扫描

void EasySelect_Sort(int a[],int n)
{
	int k;
	for(int i=1;i<n;i++)
	{
		k=i-1;
		for(int j=i;j<n;j++)
		{
			if(a[j]<a[k])
			{
				k=j;
			}
		}
		if(k!=(i-1))
		{
			int temp=a[i-1];
			a[i-1]=a[k];
			a[k]=temp;
		}
	}
}

  

经过分析可以得到,最坏时间复杂度为O(n2),最好时间复杂度为O(n2)

空间复杂度为O(1);

简单选择排序是不稳定的!,例如3,3,2

二.堆排序

上面的简单选择排序中,一趟只能选出一个最大的,一趟比较完之后第二趟重新开始比较,这样一来,第一趟比较时的结果就浪费了,我们如果能够将他们利用起来的话,可想而知,可以提高不少效率,堆排序就是在这样的情况下提出来的

堆排序通过维护堆的数据特点,来实现排序,所谓堆,分为大根堆和小根堆,大根堆就是,根节点大于左子结点且根节点大于右子结点(a[i]>=a[2i]&&a[i]>=a[2i+1])

我们以大根堆为例,分析,堆排序的过程:

堆排序分为:维护堆,建立堆,堆排序三个过程

所谓维护堆:

时间: 2024-10-14 00:31:44

选择类排序总结的相关文章

详谈排序算法之选择类排序(两种方法实现堆排序)

   今天我们再来讨论一下选择类排序,选择类排序分为:简单排序,树形选择排序和堆排序.但我们主要说的是简单和堆排序两个,因为树形选择排序使用了较多的辅助空间,以及和∞进行多余比较,为弥补树型选择排序的这些缺点, J.W.J.Williams 在 1964 年提出了进一步的改进方法,即堆排序.对于我个人而言..一开始并不是很理解它的算法思想,纠结了许久.在网上查找资料的时候发现这位大神的文章思路十分清晰,而且把创建堆以及堆化数组的算法讲解的十分详细.如果有不明白堆排序思路的,可以先看看这篇文章~堆

选择类排序

#include<stdio.h> /* *选择类排序,每天一道算法题 *按照从小到大的顺序进行排序 * */ //遍历序列 void traverseArray(int *p,int length) { int i=0; for(;i<length;i++) { printf("%d\n",p[i]); } } //简单选择类排序 void selectSort(int *p,int length) { int i,j,temp,index; for(i=0;i&l

选择类排序:选择排序,堆排序

选择类排序:1:简单选择排序O(n^2),空间O(1) 2:堆排序O(n乘以log以2为底,n的对数),空间复杂度O(1) //选择排序 void SelectSort(int R[],int n) { int i,j,k; int tmp; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) { if(R[j]<R[k]) k=j; } if(k!=i) { tmp=R[i]; R[i]=R[k]; R[k]=tmp; } } } //堆排序 vo

15、排序:选择类排序和归并排序

代码更新自上篇,如下: 1 package ren.laughing.datastructure.algorithm; 2 3 import ren.laughing.datastructure.baseImpl.BinTreeNode; 4 5 /** 6 * 排序 7 * 8 * @author Laughing_Lz 9 * @time 2016年4月22日 10 */ 11 public class Sorter { 12 /** 13 * 直接插入排序(从小到大) 时间复杂度为O(n^

八大排序之选择类排序

直接插入排序 在有序数组中插入一个元素,可以作为一种排序方法的基础 只有一个元素的数组是一个有序数组,对n个元素的数组,可以从第一个元素所构成的单元数组开始,不断实施插入操作 插入第二个元素,得到2个元素的有序数组.插入第三个元素,得到3个元素的有序数组 如此反复,得到n个元素的有序数组 示例 对序列:6,5,8,4,3,1 进行直接插入排序 图中灰色部分代表待排序列 图中透明部分代表已排序列 int main() { int a[10] = { 6,5,8,4,3,7 }; int temp,

常见的五类排序算法图解和实现(多关键字排序:基数排序以及各个排序算法的总结)

基数排序思想 完全不同于以前的排序算法,可以说,基数排序也叫做多关键字排序,基数排序是一种借助“多关键字排序”的思想来实现“单关键字排序”的内部排序算法. 两种方式: 1.最高位优先,先按照最高位排成若干子序列,再对子序列按照次高位排序 2.最低位优先:不必分子序列,每次排序全体元素都参与,不比较,而是通过分配+收集的方式. 多关键字排序 例:将下表所示的学生成绩单按数学成绩的等级由高到低排序,数学成绩相同的学生再按英语成绩的高低等级排序.        第一个关键字是数学成绩,第二个关键字是英

排序算法总结----比较类排序

概述:排序算法可分为比较性的排序,以及运算性的排序:这里详细介绍这些排序的原理,性能,实现,以及应用场合. 前面是维基百科的介绍,这里介绍几个比较典型的算法. 理论 计算复杂性理论 大O符号 全序关系 列表 稳定性 比较排序 自适应排序 排序网络 整数排序 交换排序 冒泡排序 鸡尾酒排序 奇偶排序 梳排序 侏儒排序 快速排序 臭皮匠排序 Bogo排序 选择排序 选择排序 堆排序 Smooth排序 笛卡尔树排序 锦标赛排序 循环排序 插入排序 插入排序 希尔排序 二叉查找树排序 图书馆排序 Pat

详谈排序算法之插入类排序(两种思路实现希尔排序)

1. 排序( sorting) 的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列.其确切的定义为: 假设有n个数据元素的序列{R1 , R2 , - , Rn},其相应关键字的序列是{K1 , K2 , - , Kn} ,通过排序要求找出下标 1 , 2 , - , n的一种排列p1 , p2 , - , pn,使得相应关键字满足如下的非递减(或非递增)关系Kp1 ≤ Kp2 ≤ - ≤ Kpn这样,就得到一个按关键字有序的纪录序列{ Rp1 , Rp2 , - , Rpn }

Powershell对象选择,排序和变量存储

PowerShell基础教程(17)——对象的选择.排序和变量存储 可以使用 Select-Object cmdlet 来创建新的.自定义的 Windows PowerShell 对象,后者包含的属性是从用于创建他们的对象中选择的.键入以下命令可创建新对象,该对象仅包含 Win32_LogicalDisk WMI 类的 Name 和FreeSpace 属性: PS> Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property