亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? multi-sort1.cpp

?? Merge, Insertion, Radix, Heap, Bucket, Quick, Counting排序算法
?? CPP
字號:
/////////////////////
//                 //
// Dave S. Maynard //
// -- Daxxus       //
//                 //
/////////////////////
//                 //
//   March 2001    //
//                 //
/////////////////////

#include <iostream.h>
#include <stdlib.h>
#include <iomanip.h>
#include <time.h>
#include <string.h>
#include <math.h>
#include <list>

using namespace std;

//#define DEBUGIT

void mergeSort(int [], int, int, int []);
void Merge(int [], int, int, int, int []);

void insertionSort(int [], int);

void radix(int, int, int *, int *);
void radixSort(int *, int *, int);

void Heapify(int [], int, int);
void HeapSort(int [], int);
void BuildHeap(int [], int);

void insertionSort(list <float> &);
float* BucketSort(float [], int);

void Quicksort(int [], int, int);
void Swap(int [], int, int);
int Partition(int [], int, int);

void CountingSort(int [], int [], int, int);

void printResults(double, int);

#ifdef DEBUGIT
void printToScreen(int [], int, int);
void printToScreen(float [], int, int);
#endif

//////////
// Main //
//////////
void main()
{
int i = 0;
int startTime = 0;
int finishTime = 0;
double totalTime = 0.0;
int sampleSizeIndex;

int sampleSizes[] = {10, 50, 100, 500, 1000, 5000, 10000, 50000, 100000, 500000, 1000000};

cout << "Multi-Sort Program";

// Valid Input loop
while(1)
{
cout << endl << endl << "Sample Sizes:: ";
for(i = 0; i < 11; i++)
   cout << sampleSizes[i] << " ";
cout << endl << "Choices::       1  2   3   4    5    6     7     8      9     10      11" 
     << endl << endl << "Choose:: ";
cin >> sampleSizeIndex;
if((sampleSizeIndex < 1) || (sampleSizeIndex > 12))
   cout << "Your Choice must be between 1 and 12...";
else
   break;
}
cout << endl;

// Creation of the Random Data Array
int *rawData;
rawData = new int[sampleSizes[sampleSizeIndex - 1]];

// Seed
srand(time(NULL));

// Creation of the Random Data
for(i = 0; i < sampleSizes[sampleSizeIndex - 1]; i++)
   rawData[i] = rand();

cout << "Statistics::" << endl
     << "The Random Sample Size is " << sampleSizes[sampleSizeIndex - 1] << "." << endl << endl;

// MERGE SORT ///////////////////////////////////////////////
int *mergeData;
mergeData = new int[sampleSizes[sampleSizeIndex - 1]];

for(i = 0; i < sampleSizes[sampleSizeIndex - 1]; i++)
   mergeData[i] = rawData[i];

int *Temp;
Temp = new int[sampleSizes[sampleSizeIndex - 1]];

startTime = clock();
mergeSort(mergeData, 0, sampleSizes[sampleSizeIndex - 1] - 1, Temp);
finishTime = clock();

#ifdef DEBUGIT
printToScreen(mergeData, sampleSizes[sampleSizeIndex - 1], 100);
#endif

delete [] Temp;
delete [] mergeData;
 
totalTime = double(finishTime - startTime) / CLOCKS_PER_SEC;
printResults(totalTime, 0);
// END MERGE SORT ///////////////////////////////////////////

// INSERTION SORT ///////////////////////////////////////////
int *insertionData;
insertionData = new int[sampleSizes[sampleSizeIndex - 1]];

for(i = 0; i < sampleSizes[sampleSizeIndex - 1]; i++)
   insertionData[i] = rawData[i];

startTime = clock();
insertionSort(insertionData, sampleSizes[sampleSizeIndex - 1]);
finishTime = clock();

#ifdef DEBUGIT
printToScreen(insertionData, sampleSizes[sampleSizeIndex - 1], 100);
#endif

delete [] insertionData;

totalTime = double(finishTime - startTime) / CLOCKS_PER_SEC;
printResults(totalTime, 1);
// END INSERTION SORT ///////////////////////////////////////

// RADIX SORT ///////////////////////////////////////////////
int *radixData;
radixData = new int[sampleSizes[sampleSizeIndex - 1]];

for(i = 0; i < sampleSizes[sampleSizeIndex - 1]; i++)
   radixData[i] = rawData[i];

Temp = new int[sampleSizes[sampleSizeIndex - 1]];

startTime = clock();
radixSort(radixData, Temp, sampleSizes[sampleSizeIndex - 1]);
finishTime = clock();

#ifdef DEBUGIT
printToScreen(radixData, sampleSizes[sampleSizeIndex - 1], 100);
#endif

delete [] radixData;
delete [] Temp;

totalTime = double(finishTime - startTime) / CLOCKS_PER_SEC;
printResults(totalTime, 2);
// END RADIX SORT ///////////////////////////////////////

// HEAP SORT ///////////////////////////////////////////
int *heapData;
heapData = new int[sampleSizes[sampleSizeIndex - 1]];

for(i = 0; i < sampleSizes[sampleSizeIndex - 1]; i++)
   heapData[i] = rawData[i];

startTime = clock();
HeapSort(heapData, sampleSizes[sampleSizeIndex - 1]);
finishTime = clock();

#ifdef DEBUGIT
printToScreen(heapData, sampleSizes[sampleSizeIndex - 1], 100);
#endif

delete [] heapData;

totalTime = double(finishTime - startTime) / CLOCKS_PER_SEC;
printResults(totalTime, 3);
// END HEAP SORT ///////////////////////////////////////

// BUCKET SORT /////////////////////////////////////////
float *bucketData;
bucketData = new float[sampleSizes[sampleSizeIndex - 1]];

for(i = 0; i < sampleSizes[sampleSizeIndex - 1]; i++)
   bucketData[i] = (rand() % 1000) / 1000.0;

startTime = clock();
BucketSort(bucketData, sampleSizes[sampleSizeIndex - 1]);
finishTime = clock();

#ifdef DEBUGIT
printToScreen(bucketData, sampleSizes[sampleSizeIndex - 1], 100);
#endif

delete [] bucketData;

totalTime = double(finishTime - startTime) / CLOCKS_PER_SEC;
printResults(totalTime, 4);
// END BUCKET SORT ///////////////////////////////////////

// QUICK SORT ///////////////////////////////////////////
int *quickData;
quickData = new int[sampleSizes[sampleSizeIndex - 1]];

for(i = 0; i < sampleSizes[sampleSizeIndex - 1]; i++)
   quickData[i] = rawData[i];

startTime = clock();
Quicksort(quickData, 0, (sampleSizes[sampleSizeIndex - 1] - 1));
finishTime = clock();

#ifdef DEBUGIT
printToScreen(quickData, sampleSizes[sampleSizeIndex - 1], 100);
#endif

delete [] quickData;

totalTime = double(finishTime - startTime) / CLOCKS_PER_SEC;
printResults(totalTime, 5);
// END QUICK SORT ///////////////////////////////////////

// COUNTING SORT ///////////////////////////////////////////
int *countingData;
countingData = new int[sampleSizes[sampleSizeIndex - 1]];

Temp = new int[sampleSizes[sampleSizeIndex - 1]];

for(i = 0; i < sampleSizes[sampleSizeIndex - 1]; i++)
   Temp[i] = 0;

for(i = 0; i < sampleSizes[sampleSizeIndex - 1]; i++)
   countingData[i] = rawData[i];

startTime = clock();
CountingSort(countingData, Temp, 40000, sampleSizes[sampleSizeIndex - 1]);
finishTime = clock();

#ifdef DEBUGIT
printToScreen(Temp, sampleSizes[sampleSizeIndex - 1], 100);
#endif

delete [] countingData;
delete [] Temp;

totalTime = double(finishTime - startTime) / CLOCKS_PER_SEC;
printResults(totalTime, 6);
// END COUNTING SORT ///////////////////////////////////////

delete [] rawData;
cin.ignore();
cout << "Press [Enter] to Exit" << endl;
cin.get();
}

///////////////////////////
// recurseMerge Function //
///////////////////////////
void mergeSort(int array[], int i, int j, int Temp[])
{
int midpoint = 0;
   
// Array is empty
if(i == j)
   return;
   
// Midpoint
midpoint = (i + j) / 2;

// Recursive Calls
// Divided the Array into 2 SubArrays
mergeSort(array, i, midpoint, Temp);
mergeSort(array, midpoint + 1, j, Temp);
	
// Merge the SubArrays
Merge(array, i, j, midpoint, Temp);
}

////////////////////
// Merge Function //
////////////////////
void Merge(int values[], int i, int j, int midpoint, int Temp[])
{
int begin1 = i;
int end1 = midpoint;
int begin2 = midpoint + 1;
int end2 = j;
int index = i;

// Loop thru both SubArrays
for(; (begin1 <= end1) && (begin2 <= end2); index++)
   {
   // This copies the smallest of two values from SubArrays to Temp Array
   if(values[begin1] < values[begin2])
      {
      Temp[index] = values[begin1];
      begin1++;
      }
   else
      {
      Temp[index] = values[begin2];
      begin2++;
      }
   }
	
// Arranges the values in SubArray 1
for(; begin1 <= end1; begin1++, index++)
   Temp[index] = values[begin1];
	
// Arranges the values in SubArray 2
for(; begin2 <= end2; begin2++, index++)
   Temp[index] = values[begin2];
	
// Copies the values from the Temp Array to values Array
for(int k = i; k <= j; k++)
   values[k] = Temp[k];
}

////////////////////////////
// insertionSort Function //
////////////////////////////
void insertionSort(int values[], int size)
{
int key;

for(int j = 1; j < size; j++)
   {
   key = values[j];
   int i = j - 1;
   
   while((i >= 0) && (values[i] > key))
      {
      values[i+1] = values[i];
      i--;
      }

   values[i+1] = key;
   }
}

////////////////////////
// radixSort Function //
////////////////////////
void radixSort(int *_s, int *_t, int _n)
{
radix(0, _n, _s, _t);
radix(1, _n, _t, _s);
radix(2, _n, _s, _t);
radix(3, _n, _t, _s);
}

////////////////////
// radix Function //
////////////////////
void radix(int _b, int _n, int *_s, int *_d)
{
int count[256];
int index[256];
memset (count, 0, sizeof (count));
int i;
for(i = 0; i < _n; i++)
   count[((_s[i]) >> (_b * 8))&0xff]++;

index[0] = 0;
for(i = 1; i < 256; i++)
   index[i] = index[i-1] + count[i-1];
for(i = 0; i < _n; i++)
   _d[index[((_s[i]) >> (_b * 8))&0xff]++] = _s[i];
}

///////////////////////
// HeapSort Function //
///////////////////////
void HeapSort(int A[], int heapSize)
{
BuildHeap(A, heapSize);
for(int i=heapSize; i>1; --i)
   {
   int tmp = A[0];
   A[0] = A[i-1];
   A[i-1] = tmp;
   --heapSize;
   Heapify(A, 1, heapSize);
   }
}

////////////////////////
// BuildHeap Function //
////////////////////////
void BuildHeap(int A[], int heapSize)
{
for(int i=heapSize/2; i>0; --i)
   Heapify(A, i, heapSize);
}

//////////////////////
// Heapify Function //
//////////////////////
void Heapify(int A[], int i, int heapSize)
{
int l = 2 * i;
int r = 2 * i + 1;
int largest = 0;
if(l <= heapSize && A[l-1] > A[i-1])
   largest = l;
else
   largest = i;
if(r <= heapSize && A[r-1] > A[largest-1])
   largest = r;
if(largest != i)
   {
   int tmp = A[i-1];
   A[i-1] = A[largest-1];
   A[largest-1] = tmp;
   Heapify(A, largest, heapSize);
   }
}

////////////////////////////////////////////////////////
// Overloaded Insertion Sort Function for Bucket Sort //
////////////////////////////////////////////////////////
void insertionSort(list <float> & bucket)
{
if(bucket.size() == 1 || bucket.size() == 0)
   {
   return;
}
else
   {
   list <float>::iterator j = bucket.begin ();
   j++;
   for(; j != bucket.end(); j++)
      {
      float key = *j;
      list <float>::iterator k = j;
      k--;
      list <float>::iterator i = k;
      while(i != 0 && *i > key)
         {
         k = i;
         k++;
         *k = *i;
         i--;
         }
      k = i;
      k++;
      *k = key;
      } 
   }
}

//////////////////////////
// Bucket Sort Function //
//////////////////////////
float* BucketSort(float A[], int size)
{
int i = 0;
int index = 0;
list <float> *bucketData;
bucketData = new list <float> [size];
for(i = 0; i < size; i++)
   {
   index = (int)(A[i] *size);
   bucketData[index].push_back(A[i]);
   }
for(i = 0; i < size; i++)
   insertionSort(bucketData[i]);
list <float> concatList;
for(i = 0; i < size; i++)
   concatList.splice(concatList.end(), bucketData[i]);
list <float>::iterator concatListIterator = concatList.begin();
for(i = 0; i < size; i++)
   {
   A[i] = *concatListIterator;
   concatListIterator++;
   }
return A;
}

//////////////////////////////////////////////////////
// insertionSort Overloaded Function for BucketSort //
//////////////////////////////////////////////////////
void insertionSort(float values[], int size)
{
int key;

for(int j = 1; j < size; j++)
   {
   key = values[j];
   int i = j - 1;
   
   while((i >= 0) && (values[i] > key))
      {
      values[i+1] = values[i];
      i--;
      }

   values[i+1] = key;
   }
}

////////////////////////
// Quicksort Function //
////////////////////////
void Quicksort(int a[], int low, int high)
{
int q;
if(low < high)
   {
   q = Partition(a, low, high);
   Quicksort(a, low, q-1);
   Quicksort(a, q+1, high);
   }
}

///////////////////
// Swap Function //
///////////////////
void Swap(int a[], int one, int two)
{
int temp;
temp = a[one];
a[one] = a[two];
a[two] = temp;
}

////////////////////////
// Partition Function //
////////////////////////
int Partition( int a[], int low, int high)
{
int pivot, p_pos, i;
p_pos = low;
pivot = a[p_pos];
for(i=low+1;i<=high;i++)
   {
   if( a[i] < pivot )
      {
 	  p_pos++;
      Swap(a, p_pos, i);
      }
   }
Swap(a,low,p_pos);
return p_pos;
}

////////////////////////////
// Counting Sort Function //
////////////////////////////
void CountingSort(int A[], int B[], int k, int size)
{
int *C = new int[k];     // temp array
int i;

for(i=0; i<=k; i++)      // initialize C[] to be all 0's
   C[i] = 0;

for(i=0; i<size; i++)    // do the counting
   C[A[i]] = C[A[i]] +1;  // C[i] now has # of elements == to i

for(i=1; i<=k; i++)      // C[i] now has # of elements <= i
   C[i] = C[i] + C[i-1];

for(i=size-1; i>=0; i--) // build the sorted array
  {
  B[C[A[i]]-1] = A[i];
  C[A[i]] = C[A[i]] -1;
  }
}

///////////////////////////
// printResults Function //
///////////////////////////
void printResults(double totalTime, int title)
{
char* titles[] = {"Merge Sort", "Insertion Sort", "Radix Sort", "Heap Sort",
                  "Bucket Sort", "Quick Sort", "Counting Sort"};
cout << "The execution time for " << titles[title] << " is:: "  
     << setprecision(5) << setiosflags(ios::fixed|ios::showpoint) 
     << totalTime << " Seconds." << endl;
}

/////////////////////////////////////////////////////////////////////
// printToScreen Overloaded Function -- this is for debugging only //
/////////////////////////////////////////////////////////////////////
#ifdef DEBUGIT
void printToScreen(int values[], int size, int stepSize)
{
int columns = 0;
cout << endl << "DEBUG CODE::: " << endl;
for(int i = 0; i < size; i += stepSize)
   {
   cout << setw(6) << values[i];
   columns++;

   if(columns % 10 == 0)
      cout << endl;
   }
   cout << endl;
}

/////////////////////////////////////////////////////////////////////
// printToScreen Overloaded Function -- this is for debugging only //
/////////////////////////////////////////////////////////////////////
void printToScreen(float values[], int size, int stepSize)
{
int columns = 0;
cout << endl << "DEBUG CODE::: " << endl;
for(int i = 0; i < size; i += stepSize)
   {
   cout << setw(6) << setprecision(3) << setiosflags(ios::fixed|ios::showpoint) << values[i];
   columns++;

   if(columns % 10 == 0)
      cout << endl;
   }
   cout << endl;
}
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丁香激情综合国产| 亚洲激情自拍偷拍| 在线不卡a资源高清| 在线视频国产一区| 91麻豆福利精品推荐| 97久久超碰国产精品| 91亚洲永久精品| 色天使久久综合网天天| 一道本成人在线| 日本韩国一区二区| 欧美影视一区在线| 9191国产精品| 日韩精品一区在线观看| 久久一夜天堂av一区二区三区| 欧美一卡在线观看| 亚洲精品一区二区精华| 国产亚洲女人久久久久毛片| 国产视频一区二区在线| 亚洲四区在线观看| 亚洲一本大道在线| 免费亚洲电影在线| 国产高清在线精品| 99国内精品久久| 欧美日韩免费在线视频| 日韩女同互慰一区二区| 欧美极品xxx| 一区二区三区丝袜| 日一区二区三区| 国产精品综合在线视频| aaa国产一区| 欧美日韩不卡在线| 国产午夜亚洲精品午夜鲁丝片| 国产精品私人自拍| 天天射综合影视| 国产盗摄视频一区二区三区| 色婷婷亚洲精品| 精品久久一区二区| 亚洲精品久久久久久国产精华液| 日韩高清欧美激情| 97久久精品人人澡人人爽| 91精品国产91久久久久久一区二区| 久久久精品蜜桃| 亚洲一区二区黄色| 国产91精品欧美| 欧美日韩国产大片| 中文字幕久久午夜不卡| 婷婷国产v国产偷v亚洲高清| 懂色av一区二区三区免费看| 欧美三区在线观看| 国产精品国产三级国产aⅴ中文| 日韩国产欧美在线观看| 成人福利视频网站| 日韩欧美国产麻豆| 亚洲五月六月丁香激情| va亚洲va日韩不卡在线观看| 欧美电影免费观看完整版| 亚洲欧美日韩国产另类专区| 国产精品91一区二区| 欧美一级欧美三级| 亚洲国产精品久久久久婷婷884| 国产精品456露脸| 日韩精品中午字幕| 日韩精品一二三| 欧美综合亚洲图片综合区| 国产精品护士白丝一区av| 精品一区二区三区蜜桃| 91精品国产综合久久香蕉的特点 | 欧美日韩高清一区二区三区| 国产精品福利在线播放| 丁香一区二区三区| 久久久精品蜜桃| 国产v综合v亚洲欧| 久久―日本道色综合久久| 美女看a上一区| 日韩欧美色综合网站| 日韩精品1区2区3区| 欧美久久久久久久久| 午夜国产不卡在线观看视频| 欧美婷婷六月丁香综合色| 一区二区三区欧美日韩| 色天天综合色天天久久| 亚洲精品免费看| 欧美色男人天堂| 日韩高清一级片| 欧美mv日韩mv国产| 国产一区在线观看麻豆| 久久久久久久久久久久久久久99| 国产一区视频网站| 国产精品人妖ts系列视频| 99re这里只有精品首页| 亚洲免费在线看| 欧美人与z0zoxxxx视频| 美日韩黄色大片| 久久久欧美精品sm网站| 懂色中文一区二区在线播放| 亚洲日本va午夜在线影院| 欧美综合视频在线观看| 日本不卡不码高清免费观看| 精品久久久久久亚洲综合网| 国产精品一级黄| 亚洲乱码国产乱码精品精小说| 欧美体内she精高潮| 老司机精品视频一区二区三区| 久久免费午夜影院| 91麻豆福利精品推荐| 丝袜亚洲精品中文字幕一区| 亚洲精品在线一区二区| 94-欧美-setu| 久久不见久久见免费视频1| 久久天天做天天爱综合色| 色综合久久综合网欧美综合网 | 久草在线在线精品观看| 日本一区二区成人在线| 欧美日韩亚洲国产综合| 国产精品综合一区二区| 亚洲国产一二三| 欧美激情一区不卡| 欧美日韩精品欧美日韩精品一| 国产精品一区二区久久精品爱涩 | 国产成人av资源| 亚洲国产毛片aaaaa无费看| 欧美成人vps| 色视频一区二区| 国产99久久久精品| 日韩精品三区四区| 亚洲美女一区二区三区| 久久综合资源网| 欧美老年两性高潮| 97精品久久久午夜一区二区三区 | 一区二区三区国产精华| 2021中文字幕一区亚洲| 91精品国产综合久久国产大片| av不卡一区二区三区| 国产成人在线免费| 麻豆精品一区二区av白丝在线| 亚洲男人的天堂av| 欧美国产精品v| 精品国产免费一区二区三区四区| 欧美视频精品在线观看| 一本久久a久久免费精品不卡| 国产高清久久久久| 国产在线国偷精品产拍免费yy| 午夜精品久久久| 亚洲一级二级在线| 一区二区三区精密机械公司| 国产精品久久久久天堂| 久久精品人人做人人爽人人| 日韩欧美中文字幕制服| 欧美日韩色一区| 欧美精品三级在线观看| 欧美亚洲动漫另类| 欧洲av在线精品| 在线观看不卡视频| 在线观看日韩毛片| 在线欧美小视频| 欧美综合一区二区| 欧美日韩一区二区三区四区五区 | 国产乱人伦偷精品视频不卡| 美女视频黄免费的久久| 日产精品久久久久久久性色| 日韩黄色免费电影| 日本欧美一区二区在线观看| 婷婷中文字幕综合| 日韩在线一区二区三区| 日韩高清电影一区| 精品一区二区国语对白| 国产成人在线免费| 91亚洲精华国产精华精华液| 91在线观看下载| 精品视频免费在线| 中文字幕成人在线观看| 国产福利一区二区三区视频在线| 国产精品一区二区黑丝| av午夜精品一区二区三区| 在线视频观看一区| 欧美伦理影视网| 2020日本不卡一区二区视频| 国产精品久久久久久久久免费相片| 国产精品久久三| 亚洲国产sm捆绑调教视频 | 精品欧美乱码久久久久久 | 亚洲大片精品永久免费| 日本午夜精品视频在线观看| 精品一区二区三区免费毛片爱 | 亚洲同性同志一二三专区| 一卡二卡三卡日韩欧美| 琪琪一区二区三区| 不卡一二三区首页| 欧美日韩一级大片网址| 2017欧美狠狠色| 亚洲一线二线三线视频| 黄网站免费久久| 91国产精品成人| 欧美精品一区二区三| 亚洲精品第一国产综合野| 蜜桃视频在线一区| 97国产精品videossex| 精品国产一区二区三区久久久蜜月| 国产精品免费视频网站| 久久精工是国产品牌吗|