请教如何统计快速排序里元素的比较次数和交换次数
来源:互联网 发布:9.9元淘宝斜挎包女包 编辑:程序博客网 时间:2024/05/20 19:32
我自己放了comparison Counter 和 swap Counter,可是不确定是不是对的
请高手帮我看下,非常感谢
void quickSortFirst(int data[],int lo,int hi){ int pivot,l,r,temp;l = lo; r = hi; pivot=data[lo];// choose First element as pivotwhile(l<r) { while(data[l]<pivot) {++l;compCounterFirst++; // comparison counter ++} while(data[r]>pivot) {--r;compCounterFirst++; // comparison counter ++} if(l>=r) break; temp = data[l]; data[l] = data[r]; data[r] = temp; swapCounterFirst++; // swap counter ++ ++l; --r; } if(l==r) l++; if(lo<r) quickSortFirst(data,lo,l-1); if(l<hi) quickSortFirst(data,r+1,hi); }
以下是完整代码我的程序的
#include <iostream>#include <fstream>#include <sstream>#include <string>#include <cstring>#include <ctime>using namespace std;const int MAX=100000;static int swapCounterFirst=0;static int compCounterFirst=0;static int swapCounterMedian=0;static int compCounterMedian=0;void intiArr (string, int[], int&);void printArr (int[], int, int);void heap_sort(int [], int);void quickSortFirst(int [], int, int);void quickSortMedian(int [], int, int);int main (){int size=0;int totalNumberOfSwap=0;int totalNumberOfComparison=0;// int oriArr[MAX];int oriArr[]={4, 2, 7, 8, 1, 9, 3, 6, 5};size=sizeof(oriArr)/sizeof(int);cout<<"The source array:"<<endl;cout<<"Total number of integers is "<<size<<endl;int printWay=1;int sortWay=1;cout<<"Please select layout of display (1 for line, 2 for space)"<<endl;// cin>>printWay;// let user select layout of displayprintArr(oriArr, size, printWay);// print array on screencout<<"Please select algorithm to sort array:"<<endl<<"\t1. heap sort"<<endl<<"\t2. quick sort (using the first element of the list as pivot element)"<<endl<<"\t3. quick sort (using the median element of the list as pivot element)"<<endl<<"Pleae enter your option: ";cin>>sortWay;// let user select algorithm to sort arrayif(sortWay==1){cout<<"After heap sort:"<<endl;heap_sort(oriArr, size);//heap sort the array}else if(sortWay==2){cout<<"After quick sort (using the first element as pivot element):"<<endl;// recursive quick sort array using the first elementquickSortFirst(oriArr, 0, size-1); totalNumberOfSwap = swapCounterFirst;totalNumberOfComparison = compCounterFirst; }else if(sortWay==3){cout<<"After quick sort (using the median element as pivot element):"<<endl;// quick sort array using the median elementquickSortMedian(oriArr, 0, size-1);totalNumberOfSwap = swapCounterMedian;totalNumberOfComparison = compCounterMedian;}else{cout<<"Your input is incorrect"<<endl;}printWay=2;printArr(oriArr, size, printWay);cout<<endl<<endl<<"Total number of integers = "<<size<<endl<<"Total Number Of Swap = "<<totalNumberOfSwap<<endl<<"Total Number Of Comparison = "<<totalNumberOfComparison<<endl;return 0;}void printArr (int a[], int size, int printWay){if(printWay == 1){for(int i=0; i<size; i++){cout<<a[i]<<endl;}}else if(printWay == 2){for(int i=0; i<size; i++){if(i!=0 && i%10==0)cout<<endl;cout<<a[i]<<"\t";}}else{cout<<"Your input is incorrect"<<endl;}}// ------------------- quick sort use FIRST element as pivot-------------------void quickSortFirst(int data[],int lo,int hi){ int pivot,l,r,temp;l = lo; r = hi; pivot=data[lo];// choose First element as pivotwhile(l<r) { while(data[l]<pivot) {++l;compCounterFirst++; // comparison counter ++} while(data[r]>pivot) {--r;compCounterFirst++; // comparison counter ++} if(l>=r) break; temp = data[l]; data[l] = data[r]; data[r] = temp; swapCounterFirst++; // swap counter ++ ++l; --r; } if(l==r) l++; if(lo<r) quickSortFirst(data,lo,l-1); if(l<hi) quickSortFirst(data,r+1,hi); }// ------------------- quick sort -------------------// ------------------- quick sort use MEDIAN element as pivot-------------------void quickSortMedian(int data[],int lo,int hi){ int pivot,l,r,temp;l = lo; r = hi; pivot=data[(lo+hi)/2];//choose Median element as pivotwhile(l<r) { while(data[l]<pivot) {++l;compCounterMedian++;// comparison counter ++} while(data[r]>pivot) {--r;compCounterMedian++;// comparison counter ++} if(l>=r) break; temp = data[l]; data[l] = data[r]; data[r] = temp; swapCounterMedian++;// swap counter ++ ++l; --r; } if(l==r) l++; if(lo<r) quickSortMedian(data,lo,l-1); if(l<hi) quickSortMedian(data,r+1,hi); }// ------------------- quick sort -------------------// ------------------- heap sort -------------------void max_heapify(int data[],int i,int heapsize){ int l=2*i+1; int r=2*i+2; int largest=i; if(l<heapsize&&data[l]>data[i]) { largest=l; } if(r<heapsize&&data[r]>data[largest]) { largest=r; } if(largest!=i) { int temp=data[largest]; data[largest]=data[i]; data[i]=temp; max_heapify(data,largest,heapsize); }}void bulid_max_heap(int data[],int heapsize){ for(int i=heapsize/2-1;i>=0;i--) max_heapify(data,i,heapsize);}void heap_sort(int data[],int heapsize){ bulid_max_heap(data,heapsize); for(int i=heapsize-1;i>0;i--) { int t=data[0]; data[0]=data[i]; data[i]=t; max_heapify(data,0,i); }}// ------------------- heap sort -------------------
0 0
- 请教如何统计快速排序里元素的比较次数和交换次数
- 冒泡排序(优化版)的比较次数和交换数字次数 逆序数+树状数组
- 快速排序的最优和最差比较次数
- 冒泡排序初次建表比较和交换次数分析
- 交换次数最少的排序
- 冒泡排序的交换次数
- 冒泡排序的交换次数
- 冒泡排序中交换次数与比较次数
- 排序算法——稳定性、比较次数、交换次数
- 如何统计一列数中每个元素出现的次数
- 冒泡排序和快排的交换次数
- 比较次数最少的排序
- 元素出现次数统计
- 冒泡排序中数据交换的次数
- 冒泡排序中数据交换的次数
- 冒泡排序中数据交换的次数
- 冒泡排序中数据交换的次数
- 树状数组------冒泡排序的交换次数
- 【Android】MTK Android 编译命令
- 字符串面试题型
- 基于FFMPEG和SDL的视频播放器
- IOS应用程序多语言本地化解决方案
- 博客搬家lijiancai.cn
- 请教如何统计快速排序里元素的比较次数和交换次数
- Intel Galileo笔记(六)Linux Yocto的研究
- android内核打印
- poj 2501 Average Speed
- 剑指Offer16翻转链表
- 客户端JavaScript(一)
- 坑b的暑期大作业
- 检测系统信息
- 使用fpm创建自己的RPM