回首页 回首页 ◎ 设为首页  
◎ 收藏本站  
◎ 给我留言  
  
  首 页  C/C++教程  C++之父的FAQ  C/C++动向  C/C++源代码  C/C++误区  Unix/Linux  下载中心  乱七八糟  蚂蚁的Blog  
  当前位置:首 页 >> C/C++源代码 >> 数据结构与算法 C >> 快速排序
最 近 更 新
[转] 猴子吃桃问题的一..
通讯录程序源代码推荐
快速排序
二路插入排序
[经典算法 C] 高斯分布..推荐
[数据结构 C]赫夫曼编码推荐
线索二叉树
二叉树的基本操作
银行业务模拟推荐
杨辉三角推荐
最 新 推 荐
通讯录程序源代码推荐
[经典算法 C] 高斯分布..推荐
[数据结构 C]赫夫曼编码推荐
银行业务模拟推荐
杨辉三角推荐
迷宫求解推荐
括弧匹配检验推荐
单链表的实现及其操作推荐
顺序表及其操作推荐
二进制转换十进制(顺序..推荐
热 门 排 行
通讯录程序源代码推荐
迷宫求解推荐
杨辉三角推荐
快速排序
银行业务模拟推荐
[转] 猴子吃桃问题的一..
[经典算法 C] 高斯分布..推荐
[数据结构 C]赫夫曼编码推荐
十进制转换八进制
二进制转换十进制(顺序..推荐
站 内 搜 索

Web stdcpp.cn
关键词

搜索方式

搜索范围

精确匹配
广 告

快速排序


来源:The C Programming Language 作者:K & R 等级:一般
发布于2005-11-12 19:22 被读8178次 【字体:

#include <stdio.h>
#include <stddef.h>

int main(void)
{
    int keys[] = { 5, 8, 9, 15, -18, 150, 0, 55, -5, -108, 100 };
    int i;
    const int keys_size = (sizeof keys) / (sizeof *keys);
    /* prototype */
    void my_qsort(int v[], int left, int right);
   
    my_qsort( keys, 0, keys_size - 1 );
    for ( i = 0; i < keys_size; ++i ) {
        printf("%d ", keys[i]);
    }
   
    printf("\nPress ENTER to quit...");   
    getchar();
    return 0;
}

/* my_qsort:  sort v[left]...v[right] into increasing order */
void my_qsort(int v[], int left, int right)
{
   int i, last;
   /* prototype */
   void my_swap(int v[], int i, int j);

   if (left >= right) /* do nothing if array contains */
       return;        /* fewer than two elements */
   my_swap(v, left, (left + right)/2); /* move partition elem */
   last = left;                        /* to v[0] */
   for (i = left + 1; i <= right; i++) /* partition */
       if (v[i] < v[left])
           my_swap(v, ++last, i);
   my_swap(v, left, last);            /* restore partition elem */
   my_qsort(v, left, last-1);
   my_qsort(v, last+1, right);
}

/* my_swap:  interchange v[i] and v[j] */
void my_swap(int v[], int i, int j)
{
   int temp;

   temp = v[i];
   v[i] = v[j];
   v[j] = temp;
}

本文乃网上搜集得来,其版权归原作者和原出处所有。如有侵犯版权之处请与我联系,我将马上进行处理。



相关专题:暂无相关专题

上一篇:二路插入排序
下一篇:通讯录程序源代码

共有评论 2 条 网友评分 1分 查看全部评论

游客:!
评分:0
似乎 if (v[i] < v[left])应该改为 if (v[i] < v[last])
游客:antigloss
评分:0
就是 left。改成 last 就错了

查看全部评论

【发表评论】 评分:1分 2分 3分 4分 5分


验证码:

Powered By Www.Xydw.COM Ver1.14 管理
Copyright © 2005-2006 蚂蚁的 C/C++ 标准编程 All Right Reserved. XCMS
粤ICP备06014124号   站长:Antigloss