冒泡与选择排序在最坏的情况下都需要O(n*n)的计算时间,对于归并排序与快速排序在平均情况下需要O(nlog(n))时间。
归并与快排基本步骤:分解,递归求解,合并。
下面是快速排序完整代码。
#include<stdio.h>
#define swap(a,b,t) ((t = a),(a = b),(b = t))
void quicksort(int head,int end, int a[])
{
int i = head, j = end, t, mid = a[(head + end)/2];
if(end <= head) return;
while(1)
{
while(a[i] < mid) i++;
while(a[j] > mid) j--;
if(i >= j) break;
swap(a[i], a[j], t);
i++;
j--;
}
quicksort(head, i - 1, a);
quicksort(j + 1, end, a);
}
int main()
{
int a[100], i, n;
scanf("%d",&n);
for(i = 0; i < n; i++) scanf("%d",&a[i]);
quicksort(0, n - 1, a);
for(i = 0; i < n; i++) printf("%d ",a[i]);
return 0;
}