十大排序算法最最通俗易懂的动态图外加简单介绍,具体代码请看下一部分的讲解
自己慢慢更新:
如下:
十大排序算法的复杂度
一,冒泡排序
嗯,先说一下我对这算法的简单理解吧,冒泡排序很形象;在这组数组中将前后两个数进行比较,然后看需要的是升序还是降序,个性化的选择把那个放在前面;然后在遍历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次,排序完成。
代码如下:
四,快速排序(这个是最难理解事实上我认为啊)
五,归并排序
六,希尔排序
七,堆排序
八,记数排序
九,桶排序
十,基数排序
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/114860.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...