#include "stdafx.h" #include <iostream> #include <string> #include <stdlib.h> #include <time.h> #include <process.h> #include <windows.h> #define DATANUMBER 4000 using namespace std; int RANDOM(int a,int b); int RANDOMIZED_PARTITION(int* A,int p,int r); int PARTITION(int* A, int p, int r); void QUICKSORT(int* A , int p, int r); void RANDOMIZED_QUICKSORT(int* A,int p,int r); void RANDOMSORT(void*); int DataA[DATANUMBER]; int DataB[DATANUMBER]; int _tmain(int argc, _TCHAR* argv[]) { int randomNumOrNot; int start(0); randomNumOrNot = 2; cout<<"输入随机数比较请输入1,递增版本比较请输入0"<<endl; cin>>randomNumOrNot; if(randomNumOrNot == 1) { for(int i = 0;i!=DATANUMBER;i++) { DataA[i] = RANDOM(0,DATANUMBER); DataB[i] = DataA[i]; } } else if(randomNumOrNot == 0) { for(int i = 0;i!=DATANUMBER;i++) { DataA[i] = i; DataB[i] = i; } } else { cout<<"error!"<<endl; return 0; } do { cout<<"开始请输入1"<<endl; cin>>start; if(start != 1 && start != 0) start = 0; } while(start!=1); _beginthread(RANDOMSORT,0,NULL); QUICKSORT(DataB,0,DATANUMBER - 1); cout<<"QUICKSORT is ok!"<<endl; Sleep(20); return 0; } void RANDOMSORT(void*) { RANDOMIZED_QUICKSORT(DataA,0,DATANUMBER - 1); cout<<"RANDOMIZED_QUICKSORT is ok!"<<endl; Sleep(20); } int RANDOM(int a,int b) { srand(time(NULL));//随机数的种子 int c; if(b != a) { c = b - a; return a + rand()%c; } else return a; } int RANDOMIZED_PARTITION(int* A,int p,int r) { int i; i = RANDOM(p , r); int temp; temp = A[r]; A[r] = A[i]; A[i] = temp; return PARTITION(A,p,r);; } int PARTITION(int* A, int p, int r) { int temp; int x = A[r]; int i = p-1; for(int j=p;j!=r;j++) { if(A[j]<=x) { i++; temp = A[j]; A[j] = A[i]; A[i] = temp; } } temp = A[r]; A[r] = A[i+1]; A[i+1] = temp; return i+1; } void QUICKSORT(int* A , int p, int r) { int q; if(p<r) { q = PARTITION(A , p, r); QUICKSORT(A , p ,q-1); QUICKSORT(A , q+1 , r); } } void RANDOMIZED_QUICKSORT(int* A,int p,int r) { int q; if(p<r) { q = RANDOMIZED_PARTITION(A ,p ,r); RANDOMIZED_QUICKSORT(A , p , q-1); RANDOMIZED_QUICKSORT(A , q+1, r); } }