2 u011015374 u011015374 于 2016.03.28 11:47 提问

C++快速排序的程序填空!求大神 5C

感觉跟书上的程序有点不太一样,求大神帮忙!

图片说明

3个回答

JasonChen_ACM
JasonChen_ACM   2016.07.06 18:02

void sort(int *a, int left, int right)

{

if(left >= right)/*如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了*/

{

    return ;

}

int i = left;

int j = right;

int key = a[left];



while(i < j)                               /*控制在当组内寻找一遍*/

{

    while(i < j && key <= a[j])

    /*而寻找结束的条件就是,1,找到一个小于或者大于key的数(大于或小于取决于你想升

    序还是降序)2,没有符合条件1的,并且i与j的大小没有反转*/ 

    {

        j--;/*向前寻找*/

    }



    a[i] = a[j];

    /*找到一个这样的数后就把它赋给前面的被拿走的i的值(如果第一次循环且key是

    a[left],那么就是给key)*/



    while(i < j && key >= a[i])

    /*这是i在当组内向前寻找,同上,不过注意与key的大小关系停止循环和上面相反,

    因为排序思想是把数往两边扔,所以左右两边的数大小与key的关系相反*/

    {

        i++;

    }



    a[j] = a[i];

}



a[i] = key;               /*当在当组内找完一遍以后就把中间数key回归*/

sort(a, left, i - 1);    /*最后用同样的方式对分出来的左边的小组进行同上的做法*/

sort(a, i + 1, right); /*用同样的方式对分出来的右边的小组进行同上的做法*/

                                   /*当然最后可能会出现很多分左右,直到每一组的i = j 为止*/
chen956
chen956   2016.03.28 13:00

1.vp判断是否大于sp
2.判断vp是否小于ep
3.temp = ip的值
4.jp-->sp
5.break
6.ip的值 = jp的值,jp的值=temp;
7.3和6的组合(交换值)
第四部判定条件需要你在测试一下

chen956
chen956 第七步是交换ip的值和ep--的值,希望对你有所启发
2 年多之前 回复
caoshangpa
caoshangpa   2016.03.30 12:22

每天回帖即可获得10分可用分

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
2016年第七届蓝桥杯C/C++程序设计本科B组省赛 快速排序(代码填空)
快速排序 排序在各种场合经常被用到。 快速排序是十分常用的高效率的算法。 其思想是:先选一个“标尺”, 用它把整个队列过一遍筛子, 以保证:其左边的元素都不大于它,其右边的元素都不小于它。 这样,排序问题就被分割为两个子区间。 再分别对子区间排序就可以了。 下面的代码是一种实现,请分析并填写划线部分缺少的代码。 #include void swap(int
求a和b中的大者(指针)
/* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者: 刘同宾 * 完成日期:2012 年 11 月 30 日 * 版 本 号:v1.0 * * 输入描述:求a和b中的大者(指针) * 问题描述:
C语言n的阶乘n!程序
用c语言编的n!算法简单程序。 经过调试完全可用~ 请大家多多指教~
C语言指针练习填空和阅读程序题
C语言指针练习填空和阅读程序题,难度适中,便于考前复习。
趣味100道C语言编程题num thirteen
8除不尽的自然数:一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。求这个自然数。 #include int main(void) { int num; int a; for(a = 0;((a * 8 + 7) * 8 + 1) * 8 + 1
《C语言及程序设计》程序填空——一维数组初步
返回:贺老师课程教学链接1、 下面程序将十进制整数b转换成n进制,请填空使程序完整。#include int main() { int i=0,b,n,j,num[20] ; scanf("%d",&n); scanf("%d",&b) ; do { num[i]=_____(1)______; b=____(2)______
代码填空: 圆周率
数学发展历史上,圆周率的计算曾有许多有趣甚至是传奇的故事。其中许多方法都涉及无穷级数。     图1.png中所示,就是一种用连分数的形式表示的圆周率求法。     下面的程序实现了该求解方法。实际上数列的收敛对x的初始值 并不敏感。     结果打印出圆周率近似值(保留小数点后4位,并不一定与圆周率真值吻合)。 double x = 111;  for
题目1157:中位数:快速排序思想
题目1157:中位数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1526 解决:910 题目描述: 中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数(或最中间两个数据的平均数). 给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可(不需要使用浮点数) 输入: 该程序包含
快速排序 求第k大数
1. 快排利用标兵的思想,但每一次都是比较范围大小,没有精确排序。 2. 同样适用于快速求解 需要定性的范围问题,例如:第k大(将前后定性大小,但不用排序). 3. 求解第k大:通过判断下标,只计算有k的那一半。 4. 快排是从广到窄的递归。 5. 快排:a.枢轴要回归.b.i总是指向偏大的值.
用快速排序的思想求第K大的数或最大的k个数
#include    using namespace std;   template class T>   int quick2_sort(T a[],int low,int high)   {       T temp=a[low];       int pos=low;       int i=low,j=high;       while(i     {