直接选择排序 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随机数
①桶排序
②直接排序