排序总结——————数据结构

八中排序方式的对比

数据生成

我采用随机函数来生成随机数据,将生成的数据保存在.txt文件里

生成的数据大小范围在    [ 0 , n ]    \; [0,n]\; [0,n]内,生成的数据完全是随机的

其中 n = 1 0 3 , 1 0 4 , 1 0 5 , 1 0 6 n = 10^3, 10^4,10^5,10^6 n=103,104,105,106

采用当前时间来作为随机数种子

srand(time(NULL));//随机数种子 

生成的数据将保存在文件名为以下的文件里

1 e 3. t x t 1e3.txt 1e3.txt

1 e 4. t x t 1e4.txt 1e4.txt

1 e 5. t x t 1e5.txt 1e5.txt

1 e 6. t x t 1e6.txt 1e6.txt

代码如下

#include<bits/stdc++.h>
using namespace std;
int main()
{
	freopen("1e6.txt","w",stdout);//输出到文件 
	int n = 1e6;//数据量的大小 
	srand(time(NULL));//随机数种子 
	for(int i=0;i<n;i++)
		printf("%d ",(abs(rand())+n)%n);
	return 0;
}

排序算法

将会进行以下几种排序算法比较,

分别比较它们的

  • 运行时间:(ms)
  • 交换次数:
  • 移动次数:

八中排序算法:

  1. 插入排序 ( I n s e r t S o r t ) (InsertSort) (InsertSort)
  2. 折半插入排序 ( B I n s e r t S o r t ) (BInsertSort) (BInsertSort)
  3. 希尔排序 ( S h e l l S o r t ) (ShellSort) (ShellSort)
  4. 冒泡排序 ( B u b b l e S o r t ) (BubbleSort) (BubbleSort)
  5. 简单选择排序 ( S e l e c t S o r t ) (SelectSort) (SelectSort)
  6. 快速排序 ( Q u i c k S o r t ) (QuickSort) (QuickSort)
  7. 堆排序 ( H e a p S o r t ) (HeapSort) (HeapSort)
  8. 归并排序 ( M e r g e S o r t ) (MergeSort) (MergeSort)

性能比较

img

这些排序算法的性能比较如上图所示,我们通过时间复杂度可以看出, O ( n 2 ) O(n^2) O(n2)的算法肯定是最慢的,而堆排序,快速排序,归并排序的平均时间复杂度是 O ( n &ThinSpace; l o g &ThinSpace; n ) O(n\,log\,n) O(nlogn),显然比其他算法快一些。

我们用这些算法对相同的随机数据进行排序,观察一下它们的运行时间,移动次数,交换次数,来进行更加直观的分析。

运行时间比较(ms)

排序算法 数据大小1e31e41e51e6
InsertSort1877809889262
BInsertSort1756828838490
ShellSort0137413
BubbleSort31396933890712
QuickSort0115151
SelectSort1120117751131986
HeapSort0221564
MergeSort0123184

在这里插入图片描述
我们观察运行时间(单位ms),数据是1e3的时候看不出来大的差别,但是当数据逐渐增多,不同的算法排序所用的时间差别也越来越大!

在数据为1e6的时候,快速排序将1e6的数据排完序仅用了0.1s,而冒泡排序将这些数据排序成功需要花费一个多小时,现在我们做的才仅仅是百万级别的数据,和普通的算法相比,优秀的算法要比它快三万倍。

在这个大数据的时代,算法的重要性不言而喻。

移动次数比较

排序算法 数据大小1e31e41e51e6
InsertSort251935248347322498350057249759429861
BInsertSort251944248347402498350073249759429905
ShellSort11041204402353274152682333
BubbleSort250945248247412498250074249758429906
QuickSort4770611127633068243154
SelectSort995999099988999957
HeapSort10553139191172517820549336
MergeSort19952267232333785639902848

在这里插入图片描述

交换次数比较

排序算法 数据大小1e31e41e51e6
InsertSort990999199983999955
BInsertSort999999999999999999
ShellSort3834574337637908369173
BubbleSort250945248247412498250074249758429906
QuickSort697692974695867486
SelectSort995999099988999957
HeapSort10553139191172517820549336
MergeSort250945248247412498250074249758429906

在这里插入图片描述


本文仅代表个人观点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值