ACM第一站————快速排序

转载请注明出处,谢谢!http://www.cnblogs.com/Asimple/p/5455125.html
 
快速排序(Quicksort)是对冒泡排序的一种改进。
 
快速排序由C. A. R. Hoare在1962年提出。
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
 
故此,在快排中,如何选好基准是一件很重要的事。我习惯将第一个数做为基准。事实上,最优的情况,是将第一个,最后一个,以及中间的一个数相比较,选出最小(最大)的数作为基准。
 
下面,我写出我习惯的以第一个数为基准的快速排序,改良的就交给你了!!
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//Asimple
#include <stdio.h>
 
//打印数组
void show(int *a, int n)
{
    int i;
    for(i=0; i<n; i++)
        printf("%d ",a[i]);
    printf("\n");
}
 
//找合适的位置
int Find(int *a, int low, int high)
{
    int temp = a[low];
    while(low < high)
    {
        while(low<high && a[high] >= temp)
            high -- ;
        a[low] = a[high] ;
        while(low<high && a[low] <= temp)
            low ++ ;
        a[high] = a[low] ;
    }
    a[low] = temp ;
 
    return low;
}
 
//快速排序
void Quick_sort(int *a, int low, int high)
{
    int pos;
    if(low < high)
    {
        pos = Find(a,low,high);
 
        Quick_sort(a,low,pos-1);
        Quick_sort(a,pos+1,high);
    }
}
 
int main()
{
    int a[1001], n, i;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0; i<n; i++)
            scanf("%d",&a[i]);
 
        Quick_sort(a,0,n-1);
        show(a,n);
    }
 
    return 0;
}

 

posted @   Asimple  阅读(1539)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示