随机生成100个数,利用几种排序算法对其实现排序(C++)

C++中几种排序算法的实现

其实问题很简单:随机生成100个数,编写以下4种排序算法对其从小到大排序。
  • 冒泡排序
  • 快速排序
  • 希尔排序
  • 堆排序
  • 归并排序
以下内容主要包括算法实现。

  • 补充内容

概念内容:

#include:主要功能是处理输入输出流。

(具体参考:https://baike.baidu.com/item/iostream/2850567?fr=aladdin)

#include:集成了一些常用的函数。

(具体参考:http://blog.csdn.net/xiao229404041/article/details/6721192)

#include把日期和时间转换为字符串。
(具体参考:http://blog.csdn.net/l773575310/article/details/53258230)
namespace:与作用域相关,主要用于命名空间。
(具体参考:http://blog.csdn.net/yao_zhuang/article/details/1853625)

  • 冒泡排序

算法理解:(具体参考:https://www.cnblogs.com/kkun/archive/2011/11/23/2260280.html
代码实现:
#include 
#include 
#include 

using namespace std;
//Swap-交换
template
void Swap(T &a,T &b)
{
    T tmp=a;
    a=b;
    b=tmp;
}
//BubbleSorting Small->Large
template
void BubbleSorting(T A[])
{
    for(int i=99;i>0;i--)//Times-外循环,n-1次
    {
        int flag=0;//引入flag,稍作性能提升
        for(int j=0;j<99;j++)
        {
            if(A[j]>A[j+1])
            {
                Swap(A[j],A[j+1]);
                flag=1;
            }
        }
        if(!flag)break;
    }
}
int main()
{
    clock_t start_time = clock();

    srand(unsigned(time(NULL)));
    const int min=-100;
    const int max= 100;
    int A[200];
    for(int i=0;i<100;i++){A[i]=rand()%(max-min+1)+min;}//Generate 100 random figures
    cout<<"The random numbers are:"<

  • 快速排序

算法理解:(具体参考:https://www.cnblogs.com/MOBIN/p/4681369.html
代码实现
#include
#include
#include

using namespace std;
//交换 
template
void Swap(T &a,T &b)
{
    T tmp=a;
    a=b;
    b=tmp;
}
//划分
template
int Partion(T elem[],int low,int high)
{
    while(low
void Help(T elem[],int low,int high)
{
    if(low
void QuickSort(T elem[],int n)
{
    Help(elem,0,n-1);
}

int main()
{
    clock_t start_time=clock();
    srand(unsigned(time(NULL)));

    const int min=-100;
    const int max= 100;
    int A[200];
    cout<<"The random numbers are:"<



  • 希尔排序

算法理解: (具体参考:https://www.cnblogs.com/skywang12345/p/3597597.html)
代码实现:
#include 
#include 
#include 
using namespace std;

template
void ShellInsert(T elem[],int n,int incr)//incr代表间距
{
    for(int i=incr;i=0&&elem[j]
void ShellSorting(T elem[],int n,int inc[],int t)
{
    for(int k=0;k

  • 堆排序

算法理解: (具体参考:https://www.cnblogs.com/jingmoxukong/p/4303826.html)
代码实现:
#include 
#include 
#include 
using namespace std;

//Swap
void Swap(int &a,int &b){
    int tmp=a;
    a=b;
    b=tmp;
}
//Adjust the big node
void AdjustHelp(int A[],int low,int high){//调整堆
    for(int p=low,i=low*2+1;i<=high;i=i*2+1){
        if(iA[i])break;
        Swap(A[p],A[i]);
        p=i;
    }
}
//HeapSort Algorithm
void HeapSort(int A[],int n){
    for(int i=(n-2)/2;i>=0;i--){//写入堆
        AdjustHelp(A,i,n-1);
    }
    for(int i=n-1;i>0;i--){//排序
        Swap(A[i],A[0]);
        AdjustHelp(A,0,i-1);
    }
}
int main()
{
    clock_t start_time = clock();
    int A[100];
    const int min=-99;
    const int max=99;
    srand(unsigned(time(NULL)));
    cout << "The previous numbers are:" << endl;
    for(int i=0;i<100;i++)A[i]=rand()%(max-min+1)+min;
    for(int i=0;i<100;i++)cout<
}

  • 归并排序
算法理解: (具体参考:http://blog.csdn.net/yuehailin/article/details/68961304)
代码实现:
#include 
#include 
#include 
using namespace std;
void Merge(int elem[],int tmp[],int low,int mid,int high){
    int i=low,j=mid+1;
    int m=mid,n=high;
    int k=low;
    while(i<=m&&j<=n){
        if(elem[i]


以上均经过调试正确,代码仅供参考。

第一次修订时间:2017.12.26
第二次修订时间:2017.12.31(添加归并排序,内容并作部分修改)

你可能感兴趣的:(C++数据结构)