十大排序算法简单讲解

十大排序算法简单讲解

十大排序算法最最通俗易懂的动态图外加简单介绍,具体代码请看下一部分的讲解

自己慢慢更新:

如下:

å¨è¿éæå¥å¾çæè¿°

十大排序算法的复杂度

å¨è¿éæå¥å¾çæè¿°

一,冒泡排序

嗯,先说一下我对这算法的简单理解吧,冒泡排序很形象;在这组数组中将前后两个数进行比较,然后看需要的是升序还是降序,个性化的选择把那个放在前面;然后在遍历n边,后就排序好了

优点,比较好想,缺点,时间复杂度太大,见上表

 

 

å¨è¿éæå¥å¾çæè¿°

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
void swap(int &a,int &b)//交换函数 
{
	int tem =a;
	a = b;
	b = tem;
 } 
 void maopao(int a[13123])//冒泡排序 
 {
	for(int i = 0;i < 10;i++)
		for(int j = 0;j < 9-i;j++)
		{
			if(a[j]>a[j+1])
			{
				swap(a[j],a[j+1]);
			}	
		
		} 	
 }
 int main()
 {
 	int a[11] = { 520, 0, 1, 9, 56, 100, 85, 5, 3, 6};
 	maopao(a);
 	for(int i=0;i<10;i++)
 	{
 		cout<<a[i]<<"  ";
	 }
 }

 

二,选择排序

就是三步。

1 将数组划分为有序区和无序区。(开始有序区为空,无序区[0,n-1]) 
2 在无序区中找出最大的那个元素,与该区间第一个元素交换。(有序区元素个数加1,无序区减1) 
3 重复步骤2 ,n-1次,排序完成。(排序趟数为n-1,最后一个元素无需排序)

时间复杂度应该不考,归纳在上图

 

å¨è¿éæå¥å¾çæè¿°

 

代码为:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
void swap(int &a,int &b)//交换函数 
{
	int tem =a;
	a = b;
	b = tem;
 } 
 void xuanzhe(int a[13123])//选这排序 
 {
	for(int i = 0;i < 10-1;i++)
	{
		int min = i;
		for(int j = i;j < 10;j++)//找出无序区的最小元素下标 
		{
			if(a[j ]< a[min])
			{
				min = j;
			}
		} 	
		swap(a[i], a[min]);//无序区第一个元素与最小值交换、 
	}
 }
 int main()
 {
 	int a[11] = { 520, 0, 1, 9, 56, 100, 85, 5, 3, 6};//十个数 
 	xuanzhe(a);
 	for(int i=0;i<10;i++)
 	{
 		cout<<a[i]<<"  ";
	 }
 }

三,插入排序

插入排序跟选择排序很像,都分为有序区和无序区。但是选择排序是每次都从无序区中选出最小元素插入到有序区末尾,而插入排序是直接将数组的第一个元素作为有序区的第一个元素,每次都拿出无序区第个一元素插入到有序区合适的位置上,直到无序区为空,排序完成。

简单就是可分为以下几个步骤:

1 将数组分为有序区和无序区,有序区0,无序区[1,n-1]; 
2 取下无序区第一个元素,保存其值。 
3有序区中元素从后往前与新元素比较,如果新元素更小,旧元素往后移。 
3 重复步骤3,直到新元素大于或等于旧元素,将新元素插入该元素之后。 
4 重复步骤234, n-1次,排序完成。

 

å¨è¿éæå¥å¾çæè¿°

 

代码如下:

 

四,快速排序(这个是最难理解事实上我认为啊)

å¨è¿éæå¥å¾çæè¿°

五,归并排序

å¨è¿éæå¥å¾çæè¿°

六,希尔排序

å¨è¿éæå¥å¾çæè¿°

七,堆排序

å¨è¿éæå¥å¾çæè¿°

八,记数排序

å¨è¿éæå¥å¾çæè¿°

九,桶排序

å¨è¿éæå¥å¾çæè¿°

十,基数排序

å¨è¿éæå¥å¾çæè¿°

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114860.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PTA 浙大版《C语言程序设计实验与习题指导(第3版)》题目集(参考代码)

    PTA 浙大版《C语言程序设计实验与习题指导(第3版)》题目集(参考代码)C语言PTA练习题浙大版《C语言程序设计实验与习题指导(第3版)》题目集寒假在家,想着吧PTA上的C语言练习题写写,博主初学C语言,其中有些代码写的可能有些令人费解甚至是让人笑话,但是这也是一个练习的过程。注:其中有些题的代码参考了其他人。题目号题目名实验1-1HelloWorld!实验1-2WelcometoYou!实验1-3ProgramminginCisfun!实验1-4输出三角形实验1-5输出菱形图案实验1-6输出带

    2022年10月26日
  • 国内cdn加速免备案_免备案解析

    国内cdn加速免备案_免备案解析踩坑记录,初次尝试免备案使用国内CDN,当然结局是以失败告终,还受到了“惨痛”的教训,希望大家引以为戒,千万不要学我!!但是我现在备案了,所以可以正常使用!实现方案接入阿里云海外CDN首先通过“全球(不包含中国大陆)”的方式接入阿里云CDN,不需要检查域名备案情况,但是会在阿里云CDN留有记录了。接入阿里云海外CDN修改域名解析到国内节点虽然我们接入的是海外CDN,但是这时候将域名解析修改…

    2022年9月11日
  • Hybrid开发框架一、Weex

    Hybrid开发框架一、Weex前言最近开始试水Weex开发,使用这么长一段时间,感觉写Weex还是非常方便的。作为一个Android开发,免不了要追查一下weex的sdk源码。今天,就以WeexSDKforAndroid为例,分析SDK的认识WeexSDK源码https://github.com/alibaba/weex/tree/dev/android整体分析下拉,按照js文件的渲染过程,绘制出了下面…

    2022年9月22日
  • jmeter的正则表达式提取器_jmeter正则提取器的使用

    jmeter的正则表达式提取器_jmeter正则提取器的使用当我们的请求有这种类型的多种数据,我们要怎么获取到全部?首先,先在正则表示式提取器里面添加我们找到的左右边界然后写好正则表达式最后确定边界是唯一的然后我们运行一下,一下只就运行全部出来了…

    2022年9月3日
  • JAVA jstack命令详解「建议收藏」

    JAVA jstack命令详解「建议收藏」jstack命令详解转载于:https://www.cnblogs.com/gotodsp/p/6538644.html

    2022年10月25日
  • PriorityQueue 解析

    PriorityQueue 解析Java1.5版本后就提供了一个具备了小根堆性质的数据结构也就是优先队列PriorityQueue。//PriorityQueue默认是一个小顶堆,然而可以通过传入自定义的Comparator函数来实现大顶堆。实际上是一个堆(不指定Comparator时默认为最小堆)队列既可以根据元素的自然顺序来排序,也可以根据 Comparator来设置排序规则。队列的头是按指定排序方式的最小元素…

    2022年5月1日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号