算法设计基础2

排序算法效率比较。编程实现以下几种不同的排序算法(以升序为例):冒泡排序、选择排序、 希尔排序、快速排序,比较不同的排序过程的运行时间。具体要求:(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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值