考研编程练习----快速排序

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 为止*/

}

时间: 2024-10-05 01:53:45

考研编程练习----快速排序的相关文章

编程算法 - 快速排序算法 代码(C)

快速排序算法 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 经典的快速排序算法, 作为一个编程者, 任何时候都要完整的手写. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #include <stdlib.h> int RandomInRange(int min,

编程算法 - 快速排序(QuickSort)和二分查找(BinarySearch)

快速排序(QuickSort)和二分查找(BinarySearch) 本文地址: http://blog.csdn.net/caroline_wendy 快速排序和二分查找的定义, 网上书上都有, 本文主要是讲解如何写出这两个经典算法. 程序员必须掌握的两种算法, 使用任何语言, 使用纸都是必须的. 快速排序(C): /* * main.cpp * * Created on: 2014年9月10日 * Author: Spike */ #include <stdio.h> #include &

考研编程练习----畅通工程

题目描述: 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可).问最少还需要建设多少条道路? 输入: 测试输入包含若干测试用例.每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M:随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号.为简单起见,城镇从1到N编号.     注意:两个城

考研编程练习---StringMatching(后缀表达式)

题目描述: Finding all occurrences of a pattern in a text is a problem that arises frequently in text-editing programs.     Typically,the text is a document being edited,and the pattern searched for is a particular word supplied by the user.       We assu

考研编程练习----排名

题目描述:     今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑每题的分值,所以并不是最后的排名.给定录取分数线,请你写程序找出最后通过分数线的考生,并将他们的成绩按降序打印. 输入: 测试输入包含若干场考试的信息.每场考试信息的第1行给出考生人数N ( 0 < N < 1000 ).考题数M ( 0 < M < = 10 ).分数线(正整数)G:第2行排序给出第1题至第M题的正整数分值:以下N行,每行给出一名考生的准考证号(长度不超过2

杭电1013-Digitai Root(这是一道考研编程题-天大2015)

Digital Roots Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 53625    Accepted Submission(s): 16747 Problem Description The digital root of a positive integer is found by summing the digits of

shell脚本编程排序算法之快速排序

#!/bin/bash #shell脚本编程之快速排序的实现(以最右边为元点的思想) a=(8 5 10 3 2 93 4 1 2 3 40 9 61 8 6 29) temp= buff= #交换函数 swap() { buff=${a[$1]} a[$1]=${a[$2]} a[$2]=$buff } fun() { i=$(($1-1)) j=$1 temp=${a[$2]} if test $1 -ge $2 ;then return 2 fi while [ $j -le $2 ];d

shell脚本编程(快速排序)

#!/bin/bash #shell脚本编程之快速排序的实现(以最右边为元点的思想) a=(8 5 10 3 2 93 4 1 2 3 40 9 61 8 6 29) #a=(0 0 0 0 1 2 3 3 4 4 8 28 30495 921 43716) temp= buff= #交换函数 swap() { buff=${a[$1]} a[$1]=${a[$2]} a[$2]=$buff } fun() { i=$(($1-1)) j=$1 temp=${a[$2]} if test $1

计算机考研复试真题 简单计算器

题目描述 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. 输入描述:     测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔.没有非法表达式.当一行中只有0时输入结束,相应的结果不要输出. 输出描述:     对每个测试用例输出1行,即该表达式的值,精确到小数点后2位. 示例1 输入 1 + 2 4 + 2 * 5 - 7 / 11 0 输出 3.00 13.36 /* 天大2018考研编程题 程序设计思想: