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  阅读(1538)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示