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

直接选择排序 VS 桶排序

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

/ /直接选择排序
        #include "pch.h"
        #include
        #include
        #include
        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
        #include
        #include
        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随机数
①桶排序
直接排序与桶排序的效率比较_第1张图片 ②直接排序
直接排序与桶排序的效率比较_第2张图片

你可能感兴趣的:(数据结构,排序算法,桶排序,直接排序)