直接插入排序、shell 排序、快速排序C++實現

隨機生成數據並排序

#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");
    }

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