//选择排序 O(n2) 80000-14.497s
//选出arr[0]~arr[n-1]中最小值,与arr[0]交换
//选出arr[1]~arr[n-1]中最小值,与arr[1]交换
//选出arr[2]~arr[n - 1]中最小值,与arr[2]交换
//…………
void SelectSort(int arr[], int length)
{
for (int i = 0; i < length; i++)
{
int MinIndex = i;
int Min = arr[i];
for (int j = i+1; j < length; j++)
{
if (Min > arr[j])
{
Min = arr[j];
MinIndex = j;
}
}
if (MinIndex != i) //判断是否需要交换
{
arr[MinIndex] = arr[i];
arr[i] = Min;
}
}
cout << "排序后结果:" << endl;
for (int i = 0; i < length; i++)
{
cout << arr[i] << " ";
}
}
void SelectSort1(int arr[], int length)
{
for (int i = 0; i < length; i++)
{
for (int j = i + 1; j < length; j++)
{
if (arr[i] > arr[j])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
cout << "排序后结果:" << endl;
for (int i = 0; i < length; i++)
{
cout << arr[i] << " ";
}
}
int main()
{
srand((unsigned int)time(NULL));
default_random_engine e;
uniform_real_distribution<double>u(0, 1);
int arr[80000];
int length = 80000;
for (size_t i = 0; i < 80000; i++)
{
arr[i] = u(e)*800000;
}
//int arr[] = { 10,3,5,7,8,2,4,1,0 };
//int length = 9;
start = clock();
SelectSort(arr, length); //14.497
//SelectSort1(arr, length); //34.075
stop = clock();
duration = ((double)(stop - start)) / CLK_TCK;
cout << duration << endl;
system("pause");
return 0;
}