排序算法
标题排序算法效率比较
编程实现以下几种不同的排序算法(以升序为例):冒泡排序、选择排序、 希尔排序、快速排序,比较不同的排序过程的运行时间。
#include <iostream>
#include<time.h>
using namespace std;
#define N 100000
void Bubble_sort(int *b){//冒泡排序
int i, j, t;
for (i = 0; i<N- 1; i++)
for (j = 0; j<N - i - 1; j++){
if (b[j]>b[j + 1])
{
t = b[j];
b[j] = b[j + 1];
b[j + 1] = t;
}
}
}
void selection_sort(int *b){//选择排序
int i, j, t;
for (i = 0; i<N; i++){
int k = i;
for (j = i; j<N; j++){
if (b[j]<b[k]){
k = j;
}
}
t = b[i];
b[i] = b[k];
b[k] = t;
}
}
void Diminishing_Increment_Sort(int *b){//希尔排序
int i, j, t;
int flag, gap = N;
while (gap>1)
{
gap = gap / 2;
flag = 1;
while (flag)
{
flag = 0;
for (i = 0; i<N - gap; i++)
{
j = i + gap;
if (b[i]>b[j])
{
t = b[i];
b[i] = b[j];
b[j] = t;
flag = 1;
}
}
}
}
}
void Quick_sort(int *a,int start,int end){//快速排序
if (start >= end)
{
return;
}
int i = start, j = end;
int key = a[i];
while (i < j)
{
while (i < j && a[j] >= key)
{
j--;
}
a[i] = a[j];
while (i < j && a[i] <= key)
{
i++;
}
a[j] = a[i];
}
a[i] = key;
Quick_sort(a, start, i - 1);
Quick_sort(a, i + 1, end);
}
int main()
{
int a[N];
for (int i = 0; i < N; i++)
a[i] = rand();
Bubble_sort(a);
selection_sort(a);
Diminishing_Increment_Sort(a);
Quick_sort(a,0,N-1);
cout << "运行时间: " << (double)clock() / CLOCKS_PER_SEC << "s" << endl;
return 0;
}