C++ get random via random_device, mt19937_64,uniform_int_distribution, quick sort

#include <chrono>
#include <ctime>
#include <fstream>
#include <iostream>
#include <random>
#include <sstream>
#include <thread>
#include <unistd.h>
#include <uuid/uuid.h>

using namespace std;

char *dtValue=(char*)malloc(20);
char *uuidValue=(char*)malloc(40);

char* getTimeNow()
{
    time_t rawTime=time(nullptr);
    struct tm tmInfo=*localtime(&rawTime);
    strftime(dtValue,20,"%Y%m%d%H%M%S",&tmInfo);
    return dtValue;
}

char *getUuid()
{
    uuid_t newUUID;
    uuid_generate(newUUID);
    uuid_unparse(newUUID,uuidValue);
    return uuidValue;
}



random_device rd;
mt19937_64 mt(rd());

template<typename T>
T getRandom(T min,T max)
{
    uniform_int_distribution<T> uid(min,max);
    return uid(mt);
}



template<typename T>
void swap(T *left,T *right)
{
    T temp=*left;
    *left=*right;
    *right=temp;
}


  template<typename T>
  int partitionAsc(T *arr,int low,int high)
  {  
    T pivot=arr[high];
    int i=low-1;
    for(int j=low;j<=high;j++)
    {
      if(arr[j]<pivot)
      {
        i=i+1;
        swap<T>(&arr[i],&arr[j]);
      }  
    }
    swap<T>(&arr[i+1],&arr[high]);
  return i+1;
  }
 
template<typename T>
void quickSortAsc(T* arr,int low,int high)
{
    if(low<high)
    {
        int pivot=partitionAsc(arr,low,high);
        quickSortAsc(arr,low,pivot-1);
        quickSortAsc(arr,pivot+1,high);
    }
} 

template<typename T>
void getTArray(T *arr,T min,T max,int len)
{
    for(int i=0;i<len;i++)
    {
        arr[i]=getRandom<T>(min,max);
    }
}

template<typename T>
void printTArray(T *arr,int len)
{
    for(int i=0;i<len;i++)
    {
        cout<<arr[i]<<"\t";
    }
    cout<<endl<<endl<<endl;
}

template<typename T>
void arrayTDemo(T min,T max,int len)
{
    T *arr=new T[len];
    getTArray(arr,min,max,len);
    cout<<"Before quick sort:"<<endl;
    printTArray(arr,len);
    quickSortAsc(arr,0,len-1);
    cout<<"After quick sort:"<<endl;
    printTArray(arr,len);
    delete []arr;
    cout<<getTimeNow()<<","<<__FUNCTION__<<","<<__LINE__<<endl;
}

int main(int args,char **argv)
{
    arrayTDemo<uint32_t>(0,UINT32_MAX,atoi(argv[1]));
}
g++ -g -std=c++2a -I. *.cpp -o h1 -luuid
./h1 100000

 

 

posted @ 2022-11-06 18:41  FredGrit  阅读(49)  评论(0编辑  收藏  举报