隨機生成數據並排序
#include "stdafx.h"
#include <iostream>
#include <string>
#include <algorithm>
void direct_insert_sort(int arr[], int len)
{
for (int i = 1; i<len; i++)//循環從第2個元素開始
{
if (arr[i]<arr[i - 1])
{
int temp = arr[i], j;
for (j = i - 1; j >= 0 && arr[j]>temp; j--)
{
arr[j + 1] = arr[j];
}
arr[j + 1] = temp;//此處就是a[j+1]=temp;
}
}
}
#include <iomanip>
void shell_sort(int arr[], int len) {
int group, i, j, temp;
for (group = len / 2; group > 0; group /= 2)
{
for (i = group; i < len; i++)
{
for (j = i - group; j >= 0; j -= group)
{
if (arr[j] > arr[j + group])
{
temp = arr[j];
arr[j] = arr[j + group];
arr[j + group] = temp;
}
}
}
std::cout << "\nGroup " << group << ":\n";
for (int x =0;x< len;x++)
{
std::cout << std::setw(3) << arr[x] << ' ';
}
std::cout << '\n';
}
}
int* subsort(int* left, int* right)
{
int key = *left;
while (left != right)
{
for (; --right != left && *right > key;);
*left = *right;
for (; right != left && *(++left) < key;);
*right = *left;
}
*left = key;
return left;
}
void quick_sort(int* left, int* right)
{
if (left >= right-1) return;
int* mid = subsort(left, right);
quick_sort(left, mid);
quick_sort(mid+1, right);
}
#include <random>
int main()
{
while (1) {
auto& e = std::default_random_engine(std::random_device{}());
std::uniform_int_distribution<int> u(0, 100);
std::cout << "Random data:\n" << std::left;
int arr[20];
for (int&x : arr)
{
x = u(e);
std::cout << std::setw(3) << x << ' ';
}
std::cout << '\n';
//shell_sort(arr, 20);
//direct_insert_sort(arr, 20);
quick_sort(arr, arr + 20);
std::cout << "\nAfter sort:\n";
for (int x : arr)
{
std::cout << std::setw(3) << x << ' ';
}
std::cout << '\n';
system("pause");
}