直接排序与桶排序的效率比较

直接选择排序 VS 桶排序

说明:
数据结构课的作业。采用的ran()函数生成随机数,范围是0-29999。对1000000随机数进行直接选择排序和桶排序。时间有限,没有加循环取多次结果平均值,只进行一次。
其实两者的效率差别很大,选择桶排序是因为对其两个缺点:①不适用稀疏数据②不适用无穷定义域数据 有改进的一点想法。之后会更新我的想法并做测试。

/ /直接选择排序
        #include "pch.h"
        #include<stdlib.h>
        #include<windows.h>
        #include<iostream>
        using namespace std;
        int A[1000000] ;
        int n=1000000;
        
        void Value()
        {
        	for (int i = 0; i < n; i++)
        	{
        		A[i] = rand() % 30000 + 1;
        	}
        }
        
        void sort()
        {
        	for (int i = 0; i < n; i++)
        	{
        		int min = i;
        		for (int j = i + 1; j < n; j++)
        		{
        			if (A[j] < A[i])
        			{
        				min = j;
        			}
        		}
        		if (min != i)
        		{
        			int temp;
        			temp = A[min];
        			A[min] = A[i];
        			A[i] = temp;
        		}
        	}
        	
        }
        
        void print()
        {
        	for (int j = 0; j < n; j++)
        	{
        		cout << A[j] << " ";
        	}
        }
        
        int main()
        {
        	long t1 = GetTickCount();
        	Value();
        	sort();
        	long t2 = GetTickCount();
        	print();
        	long t3 = GetTickCount();
        	cout << "运行时间:(不包含输出)" << (t2 - t1) << endl;
        	cout << "运行时间:" << (t3 - t1) << endl;
        	return 0;
        }

下面是桶排序。

//桶排序
     #include "pch.h"
        #include<stdlib.h>
        #include<windows.h>
        #include<iostream>
        using namespace std;
        
        int lengthB = 30000;
        int lengthA = 1000000;
        int B[30000] = { 0 };
        int A[1000000];
        
        void Value()
        {
        	for (int i = 0; i < lengthA; i++)
        	{
        		A[i] = rand() % 30000 + 1;
        	}
        }
        
        void sort(int lengthA, int lengthB, int A[])
        {
        	for (int i = 0; i < lengthA; i++)
        	{
        
        		B[A[i]]++;
        
        	}
        	for (int j = 0; j < lengthB; j++)
        	{
        		for (int k = 0; k < B[j]; k++)
        		{
        			cout << j << " ";
        		}
        	}
        }
        
        int main()
        {   long t1 = GetTickCount();
        	Value();
        	sort(lengthA, lengthB, A);
            long t2 = GetTickCount();
        	cout << "运行时间:" << (t2 - t1) << endl;
        	return 0;
        }

运行时间分析:
(1)1w随机数
①桶排序
桶排序一万随机数时间 ②直接排序
直接插入排序时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值