南邮数据结构试验---各种内排序算法实现及比较
来源:互联网 发布:淘宝不卖爱奇艺 最早 编辑:程序博客网 时间:2024/06/06 02:25
南邮数据结构试验—各种内排序算法实现及比较
#include<iostream>using namespace std;#include<time.h>#include<algorithm>#include<stdlib.h>#include <cstdio>#include <cstring>#define random(x) (rand()%x)#define NUM 40000 clock_t start,stop;double duration;void SelectSort(int A[],int n){ int small; for(int i =0;i<n-1;i++) { small = i; for(int j = i+1;j<n;j++) { if(A[j]<A[small]) small = j; swap(A[i],A[small]); } }}void InsertSort(int A[],int n) //直接插入排序{ for(int i=1;i<n;i++) { int j=i; int temp=A[j]; while(j>0&&temp<A[j-1]) { A[j]=A[j-1]; j--; } A[j]=temp; }}void BubbleSort(int A[],int n) //冒泡排序{ int i,j,last; i=n-1; while(i>0) { last=0; for(j=0;j<i;j++) if(A[j+1]<A[j]) { swap(A[j],A[j+1]); last=j; } i=last; }}void QSort(int A[],int left,int right){ int i,j; if(left<right) { i=left; j=right+1; do { do i++;while (A[i]<A[left]); do j--;while (A[j]>A[left]); if(i<j) swap(A[i],A[j]); }while(i<j); swap(A[left],A[j]); QSort(A,left,j-1); QSort(A,j+1,right); }}void QuickSort(int A[],int n) //快速排序{ QSort(A,0,n-1);}void GQSort(int A[],int left,int right){ int i,j; if(right>=9) { if(left<right) { i=left; j=right+1; do { do i++;while (A[i]<A[left]); do j--;while (A[j]>A[left]); if(i<j) swap(A[i],A[j]); }while(i<j); swap(A[left],A[j]); QSort(A,left,j-1); QSort(A,j+1,right); } } else { InsertSort(A,right-left+1); return ; }}void GQuickSort(int A[],int n) //改进的快速排序{ GQSort(A,0,n-1);}void Merge(int A[],int i1,int j1,int i2,int j2) //两路合并排序{ int* Temp=new int[j2-i1+1]; int i=i1,j=i2,k=0; while(i<=j1&&j<=j2) { if(A[i]<=A[j]) Temp[k++]=A[i++]; else Temp[k++]=A[j++]; } while (i<=j1) Temp[k++]=A[i++]; while(j<=j2) Temp[k++]=A[j++]; for(i=0;i<k;i++) A[i1++]=Temp[i]; delete[] Temp;}void MergeSort(int A[],int n){ int i1,j1,i2,j2; int size=1; while(size<n) { i1=0; while(i1+size<n) { i2=i1+size; j1=i2-1; if(i2+size-1>n-1) j2=n-1; else j2=i2+size-1; Merge(A,i1,j1,i2,j2); i1=j2+1; } size*=2; }}void AdjustDown(int A[],int r,int j){ int child=2*r+1; int temp=A[r]; while (child<=j) { if((child<j)&&(A[child]<A[child+1])) child++; if(temp>=A[child]) break; A[(child-1)/2]=A[child]; child=2*child+1; } A[(child-1)/2]=temp;}void HeapSort(int A[],int n){ for(int i=(n-2)/2;i>-1;i--) AdjustDown(A,i,n-1); for(int i=n-1;i>0;i--) { swap(A[0],A[i]); AdjustDown(A,0,i-1); }}int main(){ int a[NUM];//乱序 int b[NUM]; int c[NUM]; int d[NUM];//乱序 int e[NUM]; int f[NUM]; int g[NUM];//乱序 memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); memset(d,0,sizeof(d)); memset(e,0,sizeof(e)); memset(f,0,sizeof(f)); memset(g,0,sizeof(g)); srand((int)time(0)); for(int x=0;x<NUM;x++) { a[x]=random(NUM); b[x]=a[x]; c[x]=a[x]; d[x]=a[x]; e[x]=a[x]; f[x]=a[x]; g[x]=a[x];// cout<<a[x]<<endl; } start = clock(); SelectSort(a,NUM); stop = clock(); cout<<"简单选择法排序完成时间为:"<<endl; duration = (double)(stop-start)/CLK_TCK; cout<<duration<<endl; start = clock(); InsertSort(b,NUM); //直接插入排序 stop = clock(); cout<<"直接插入法排序完成时间为:"<<endl; duration = (double)(stop-start)/CLK_TCK; cout<<duration<<endl; start = clock(); BubbleSort(c,NUM); //冒泡排序 stop = clock(); cout<<"冒泡法排序完成时间为:"<<endl; duration = (double)(stop-start)/CLK_TCK; cout<<duration<<endl; start = clock(); QuickSort(d,NUM);//快速排序 stop = clock(); cout<<"快速排序完成时间为:"<<endl; duration = (double)(stop-start)/CLK_TCK; cout<<duration<<endl; start = clock(); GQuickSort(e,NUM);//改进的快速排序 stop = clock(); cout<<"改进的快速排序完成时间为:"<<endl; duration = (double)(stop-start)/CLK_TCK; cout<<duration<<endl; start = clock(); MergeSort(f,NUM); stop = clock(); cout<<"合并法排序完成时间为:"<<endl; duration = (double)(stop-start)/CLK_TCK; cout<<duration<<endl; start = clock(); HeapSort(g,NUM); stop = clock(); cout<<"堆排序完成时间为:"<<endl; duration = (double)(stop-start)/CLK_TCK; cout<<duration<<endl; return 0;}
0 0
- 南邮数据结构试验---各种内排序算法实现及比较
- 南邮数据结构实验四----各种内排序算法的实现及性能比较
- 各种内排序算法的实现及性能比较
- java实现各种排序算法及比较
- java实现各种排序算法及比较
- [数据结构]各种排序算法比较
- [排序算法] 各种排序算法(内排序)的比较及选择依据
- 数据结构编程笔记二十八:第十章 内排序 各种排序算法效率比较
- 数据结构----各种排序算法的比较
- 数据结构中各种排序算法比较
- 数据结构中各种排序算法比较
- 数据结构的各种排序算法稳定性比较
- 数据结构----各种排序算法的比较
- 数据结构中各种排序算法比较
- [算法] 各种排序算法思想及比较
- 数据结构编程笔记二十七:第十章 内排序 各种排序算法的实现
- 各种排序算法思想及比较
- 各种内排序算法(Python实现)
- android Material design
- android使用sax解析xml
- 初步封装jdbc
- Objective-c语言_使用字符串然后retainCount会出现一长串数字
- ps与kill配合
- 南邮数据结构试验---各种内排序算法实现及比较
- xcode的环境变量,Build Settings参数,workspace及联编设置
- (1) Android Junit 安卓单元测试
- Hibernate教程01——建立一个hibernate程序
- 超级计算器——两个大数相乘
- Linux/Mac osx设置C/C++终端输出字体颜色
- Javascript——DOM编程
- s5pv210 LCD控制器初始化
- 初学 HTML制作网页