直接排序與桶排序的效率比較

直接選擇排序 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隨機數
①桶排序
桶排序一萬隨機數時間 ②直接排序
直接插入排序時間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章