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

选择类排序: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;
		}
	}
}

//堆排序
void sift(int R[],int low,int high)
{
	int i=low,j=2*i;
	int tem=R[i];
	while(j<=high)
	{
		if(j<high && R[j]<R[j+1])//孩子最大的给双亲
			j++;
		if(tmp<R[j])
		{
			R[i]=R[j];
			i=j;             //以孩子为双亲,继续向下探索
			j=2*i;
		}
		else
			break;
	}
	R[i]=tmp;
}

void HeapSort(int R[],int n)
{
	int i;
	int tmp;
	for(i=n/2;i>=1;i--)//循环建立初始堆
		sift(R,i,n);
	for(i=n;i>=2;i--)
	{
		tmp=R[1];
		R[1]=R[i];
		R[i]=tmp;
		sift(R,1,i-1);
	}
}

时间: 2024-10-11 01:35:49

选择类排序:选择排序,堆排序的相关文章

排序算法大集锦_选择类——直接选择排序

这一系列博客的特点就是--给出每趟排序的结果 本来想着好好写一下过程,弄个图片什么的,不过觉得网上的解析太多了,都比较好,所以这些博客就算是对自己的总结吧. #include <stdio.h> void SelectSort(int *m, int n) { int i,j,k,temp; bool flag; for(i=0;i<n-1;i++) { k=i; flag=true; for(j=i+1;j<n;j++) if(m[j]<m[k]) k=j; if(k!=i

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

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

选择类排序总结

选择类排序总结 所谓选择类排序的思想就是:从数组的中选出最大或最小的,通过多次选择最后达到排序的目的 首先是简单选择排序 思想:每趟扫描中,选出最小的数字放在最前面,然后从第二个数字开始扫描,直到只剩下最后一个数不需要扫描 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)

C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序

以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序,然后是測试的样例.代码位置:http://download.csdn.net/detail/luozuolincool/8040027 排序类: public class Sortings { //插入排序 public void insertSort(int[] array) { int temp = 0; int index = 0; for (int i = 0; i <

选择类排序

#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.内部排序的复杂度总结 1)时间复杂度 4种排序的平均时间复杂度是O(nlog2n),"快些以nlog2n的速度归队"(快排.希尔排序.归并.堆排序) 最坏情况下,快排的时间复杂度为O(n*n) 2)空间复杂度 O(log2n)快排 O(n)归并 O(rd)基数 其他都是O(1) 3)稳定性 不稳定的:"考研复习痛苦啊,情绪不稳定,快些选一堆好友来聊天吧"(快排.希尔.简单选择排序.堆排序) 其他都是稳定的. 4)一趟排序,保证一个关键字到达最终位置 交换类(起泡

三大基本排序--选择、冒泡、插入

引言: 老师已经是第三次跟我们讲排序了,可想而知排序它的重要性,这三种基本排序的方式值得我们思考和研究,理解其中的思想. 简述: 概念: 将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序 常见排序算法: 快速排序.希尔排序.堆排序.直接选择排序不是稳定的排序算法,而基数排序.冒泡排序.直接插入排序.折半插入排序.归并排序是稳定的排序算法. 选择排序: 原理: 将初始序列(A[0]~A[n-1])作为待排序序列,按照从小到大进行排序,假设现在A[0]是最小的,将剩余的元素与其进行

[jQuery编程挑战]004 针对选择框词典式排序

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="utf-8"/> <title>针对选择框词典式排序</title> <script type="text/javascript" src="../js/jquery-1.11.0.js"></script> <scr

算法大神之路----排序(选择排序法)

选择排序法,顾名思义,就是把特定的数据选择出来进行排序. 选择排序法有两种方式 在所有的数据中,当由大到小排序,那么就将最大值放到第一个位置 如果由小到大排序,那么就将最小值放到第一个位置 以由小到大排序举例,当排序时候,扫描整个数据,拿第一个依次与其他做比较,如果其他数据比第一个大,或者相等,那么就不交换,如果其他数据比第一个数小,那么就交换二者的位置,扫描结束后,则从第二个数开始,依次扫描. 方法分析 无论是最坏还是最好情况,甚至是平均情况下,都需要对全部数据进行扫描,找到最大或最小值,因此