排序算法效率比较。编程实现以下几种不同的排序算法(以升序为例):冒泡排序、选择排序、 希尔排序、快速排序,比较不同的排序过程的运行时间。具体要求:(1)为了消除数据之间差异导致排序效果的影响,使用相同的数组进行排序,方法为:首先创建一个数组,数组长度至少为100000,数组元素取值范围在[0, 100000]之间的随机正整数,并将这个数组复制4份,分别用不同的排序算法进行排序。(2)记录不同排序算法的运行时间。(3)对完全逆序的情况进行测试,将待排序数组赋值为逆序,即与最终排序要求完全相反。
#include<iostream>
#include <algorithm>
#include<stdlib.h>
#include<time.h>
using namespace std;
#define N 100000
bool cmp(int a,int b){
return a<b;
}
void bubbleSort(int data[],int n){
for(int i=0;i<n;i++)
for(int j=0;j<n-i;j++)
if(data[j]>data[j+1])
swap(data[j],data[j+1]);
}
void selectionSort(int data[],int n){
for(int i=0;i<n;i++) {
int min=i;
for (int j=i+1; j<n; j++)
if (data[j]<data[min])
min=j;
swap(data[i], data[min]);
}
}
void shellSort(int data[],int n){
int h=1;
while (h<n/3) {
h=3*h+1;
}
while (h>=1) {
for (int i=h; i<n; i++) {
for (int j = i; j>= h&&data[j]<data[j-h]; j -=h) {
swap(data[j], data[j - h]);
}
}
h=h/3;
}
}
void quickSort(int data[],int n){
sort(data,data+n);
}
int main(){
int data[N];
clock_t start,fin;
double time_bubble;
double time_selection;
double time_shell;
double time_quick;
for(int i=0;i<N;i++){
data[i]=rand()%N;
cout<<data[i];
}
sort(data,data+N,cmp);
start=clock();
bubbleSort(data,N);
fin=clock();
time_bubble=(double)(fin-start)/CLOCKS_PER_SEC;
start=clock();
selectionSort(data,N);
fin=clock();
time_selection=(double)(fin-start)/CLOCKS_PER_SEC;
start=clock();
shellSort(data,N);
fin=clock();
time_shell=(double)(fin-start)/CLOCKS_PER_SEC;
start=clock();
quickSort(data,N);
fin=clock();
time_quick=(double)(fin-start)/CLOCKS_PER_SEC;
cout<<"time_bubble:"<<time_bubble<<"ms"<<endl;
cout<<"time_selection:"<<time_selection<<"ms"<<endl;
cout<<"time_shell:"<<time_shell<<"ms"<<endl;
cout<<"time_quick:"<<time_quick<<"ms"<<endl;
return 0;
}