`
hufeng
  • 浏览: 100977 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

各类排序算法总结

阅读更多
#include "stdio.h"
#include "stdlib.h"

void swap(int a[],int i,int j)
{
	int temp;
	temp=a[i];
	a[i]=a[j];
	a[j]=temp;

}
/*选择排序数组实现 每次从无序区里面选择一个最小的数插入到有序区 有序区从0开始即开始无元素*/

void selectSort(int a[],int l)
{
	int i,j,index;
	for(i=0;i<l;i++)
	{
		index = i;
		for(j=i+1;j<l;j++)
		{
			if(a[j]<a[index])index=j;//每次找最小的值,定位最小的坐标
		}
		//for j循环后 判定最小下标是否改变
		if(index!=i)
		{
			swap(a,index,i);
		}
	}
}

/*插入排序数组实现 每次从无序区里面选择一个值,插入到有序区里面 有序区从1开始即开始是数组第一个元素*/
void insertSort(int a[],int l)
{
	int i,j;
	//i之前有序,i之后无序
	for(i=1;i<l;i++)
	{
		for(j=i;j>0;j--)
			if(a[j]<a[j-1])
			{
				swap(a,j,j-1);
			}
	}
}

/*冒泡排序数组实现 每次循环一趟,根据两相邻的数组值比较,最大的上浮,一趟结束后,数组的最后一个值即最大值,下次每次循环从数组最大下标-1开始*/
void bubbleSort(int a[],int l)
{
	int i,n;
	int flag = 0;//设置判定标示 提供冒泡效率
	n=l-1;
	//第一次要比较(冒泡)l-1次,依次类推
	while(n)
	{
		flag = 0;//每次循环前复位
		for(i=0;i<=n;i++)
		{
			if(a[i]>a[i+1])
			{
				swap(a,i,i+1);
				flag=1;//有比较则标示
			}
		}
		//判定每次循环是否有比较,无比较则退出循环
		if(!flag)break;
		n--;
	}
}
/*快速排序之一趟排序 定中间位 比较难理解,最好看看图形示意*/
int partition(int a[],int s,int e)
{
	int key=a[s];
	while(s<e)
	{
		while(s<e&&key<=a[e])e--;
		if(s<e)a[s++]=a[e];
		while(s<e&&a[s]<=key)s++;
		if(s<e)a[e--]=a[s];
	}
	a[s]=key;
	return s;
}

/*快速排序的数组实现 采用分而治之的思想,每次拿数组的第一个元素作为中间元素,其左边的比该元素小,其右边的比该元素大,递归...最后有序*/
void quickSort(int a[],int s,int e)
{
	if(s<e)//不是while 很要命
	{
		int i = partition(a,s,e);
		//printf("i=%d\n",i);
		quickSort(a,s,i-1);
		quickSort(a,i+1,e);
	}
}


/*归并排序之 二路归并排序*/

void main()
{
	int a[8]={3,4,2,8,6,4,5,1},k;
	printf("初始序列\n");
	for(k=0;k<8;k++)printf("%d ",a[k]);
	printf("\n\n");
	printf("选择排序后结果\n");
	quickSort(a,0,7);
	for(k=0;k<8;k++)printf("%d ",a[k]);
//	bubbleSort1(a,8);
//	printf("插入排序后结果\n");
	//printf("快速排序后结果\n");
	//quickSort(a,0,7);
//	for(k=0;k<8;k++)printf("%d ",a[k]);
}


分享到:
评论

相关推荐

    数据结构-各类排序算法总结.doc

    数据结构-各类排序算法总结.doc

    排序算法总结,不错的文档

    排序算法总结,多各类排序方法的利弊进行讨论.希望对大家有用

    总结各类排序方法

    总结各类排序方法。排序问题一直是计算机技术研究的重要问题,排序算法的好坏直接影响程序的执行速度和辅助存储空间的占有量。此代码将详细分析常见的各种排序算法,并从时间复杂度、空间复杂度、适用情况等多个方面...

    各类排序算法源代码

    各类排序算法的总结 // 排序.cpp : 定义控制台应用程序的入口点。 // #include "stdio.h" #include "math.h" #include "tchar.h" #define MAX_OF_ARRAY 10 int iTemp = 0; int iTimes = 0; ////////...

    基本算法个人总结

    包含各类排序算法,树,链表,八皇后等算法

    C++ 常用经典算法代码

    C++ 常用经典算法代码; 包括各类排序,广度搜索,深度搜索,高精度计算,二叉树,背包问题等几乎囊获了目前所有经典问题,总结了算法模板,方便大家直接使用。建议大家下载收藏。

    leetcode题库-algorithm-pattern:算法模板,c++实现,包括最基础的数据结构和常用的算法实现!

    推荐的刷题顺序:二叉树—&gt;线性表—&gt;排序算法—&gt;死磕二叉树—&gt;动态规划—&gt;滑动窗口—&gt;回溯法—&gt;其他类型(顺序随意)。一定要先刷二叉树,先刷二叉树,先刷二叉树,重要的事情说三遍。。。 (说一下本人的复习情况

    数据结构知识框架图 思维导图

    数据结构知识框架图 很细致很总结 包含哈希 图 各类树 排序 递归 算法复杂度

    基于进化算法的多目标生产排序研究进展* (2008年)

    利用多目标进化算法求解复杂生产...首先调查了国内外采用进化算法求解多目标生产作业排序的研究现状,分别对3类不同策略的多目标进化算法设计思想进行分析,在总结各类方法优劣的基础上,给出了进一步研究的趋势展望.

    蓝桥杯竞赛常见问题及其解决方法和经验总结.docx

    解决方法:参赛前应系统性地复习数据结构、算法设计与分析等相关知识,通过刷题巩固基础,尤其是对排序、搜索、图论、动态规划等核心算法要熟练掌握并能灵活运用。 时间管理不当: 经验总结:比赛中往往时间有限,...

    leetcode题库-leetcode:leetcode答案和算法

    对于常见的各类算法,如排序、搜索、图遍历、二叉树遍历,直接背代码基本模板 对于常见的策略/trick也直接背代码,真的不是很多 Tricks 前缀和:限制前缀和所对应的字串长度时,应反向索引,在某一元素可使用时再...

    计算机二级C语言考试题预测

    总结 D. 都不正确 (18) 下述关于数据库系统的叙述中正确的是(A) A. 数据库系统减少了数据冗余 B. 数据库系统避免了一切冗余 C. 数据库系统中数据的一致性是指数据类型的一致 D. 数据库系统比文件系统能管理更多的...

    二级C语言公共基础知识

    (10) 数据字典是各类数据描述的集合,它通常包括5个部分,即数据项、数据结构、数据流、______和处理过程。 答:数据存储 (11) 设一棵完全二*树共有500个结点,则在该二*树中有______个叶子结点。 答:250 (12) 在...

    Java学习笔记-个人整理的

    {1.11.2}排序算法}{38}{subsection.1.11.2} {1.11.2.1}选择排序}{38}{subsubsection.1.11.2.1} {1.11.2.2}冒泡排序}{39}{subsubsection.1.11.2.2} {1.11.2.3}插入排序}{40}{subsubsection.1.11.2.3} {1.11.3}...

Global site tag (gtag.js) - Google Analytics