直接選擇排序 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隨機數
①桶排序
②直接排序