//快速排序
(Devc++下的C语言)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;
clock_t t1,t2;
double t;
int r[100];
int Partition(int r[],int first,int end){
int i=first,j=end;
while(i<j){
while(i<j&&r[i]<=r[j]) j--;
if(i<j){
int temp=r[i];
r[i]=r[j];
r[j]=temp;
i++;
}
while(i<j&&r[i]<=r[j]) i++;
if(i<j){
int temp=r[i];
r[i]=r[j];
r[j]=temp;
j--;
}
}
return i;
}
void QuickSort(int r[],int first,int end){
int pivot;
if(first<end){
pivot=Partition(r,first,end);
QuickSort(r,first,pivot-1);
QuickSort(r,pivot+1,end);
}
}
int main(){
int f=1,n,i,j;
cout<<"请输入数组元素的个数:";
cin>>n;
srand(55);//设置种子数
for(i=1;i<n;i++){
r[i]=rand()%1000;//随机分配
}
/*cout<<"数组的随机输入是:";
cout<<endl;
for(i=0;i<n;i++)
cout<<r[i]<<" ";
cout<<endl;*/
t1=clock();
QuickSort(r,f,n);
cout<<"数组排完序的输出是:";
cout<<endl;
for(i=0;i<n;i++)
cout<<r[i]<<" ";
cout<<endl;
t2=clock();
t=(double)(t2-t1)/CLOCKS_PER_SEC;
cout<<"运行时间为:"<<t<<endl;
return 0;
}
//选择排序
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;
clock_t t1,t2;
double t;
const int MAXN=10001;
int main(){
int n,k,j,i;
float temp,a[MAXN];
cout<<"请输入数组元素的个数:";
cin>>n;
srand(55);//设置种子数
for(i=1;i<n;i++){
a[i]=rand()%1000;//随机分配
}
/*cout<<"数组的随机输入是:";
cout<<endl;
for(i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
*/
t1=clock();
for(i=0;i<n;i++){
k=i;
for(j=i+1;j<n;j++){
if(a[j]<a[k]) k=j;
}
if(a[j]<a[k]) k=j;
if(k!=i){
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
cout<<"数组排完序的输出是:";
cout<<endl;
for(i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
t2=clock();
t=(double)(t2-t1)/CLOCKS_PER_SEC;
cout<<"运行时间为:"<<t;
return 0;
}
数据量\方法 | 快速排序 | 选择排序 |
789 个数 | 0.266 s | 0.1 s |
7766 个数 | 1.01 s | 1.192 s |
77766 个数 | 11.039 s | 18.026 s |
由上表可知当数据量在几百的时候快速排序比选择排序慢;当数据量在几千的时候快速排序和选择排序用时差不太多;当数据量上升到几万的时候快速排序明显比选择排序快了很多。由此可见当数据量少的时候选择排序快,当数据量很大的时候快速排序用时很短。分析程序,因为快速排序用的是递归调用、选择排序用的是循环所以数据量小的时候选择排序快。又由于快速排序的时间复杂度为nlog n、选择排序的时间复杂度为n2,所以当数据量很大的时候时间复杂度起主导作用,即时间复杂度越小的排序时间用的越少。