C语言中快速排序法的原理及应用

请不要粘贴!!!
粘贴者少来!!!请详细解释一下!!谢谢

  “快速排序法”使用的是递归原理,下面我结合一个例子来说明“快速排序法”的原理。首先给出一个数组{53,12,98,63,18,72,80,46, 32,21},先找到第一个数--53,把它作为中间值,也就是说,要把53放在一个位置,使得它左边的值比它小,右边的值比它大。{21,12,32, 46,18,53,80,72,63,98},这样一个数组的排序就变成了两个小数组的排序--53左边的数组和53右边的数组,而这两个数组继续用同样的方式继续下去,一直到顺序完全正确。

  一般来说,冒泡法是程序员最先接触的排序方法,它的优点是原理简单,编程实现容易,但它的缺点就是--程序的大忌--速度太慢。

附上快速排序代码:

#include<stdio.h>
void quicksort(int a[],int left,int right)
{
    int i,j,temp;
    i=left;
    j=right;
    temp=a[left];
    if(left>right)
        return;
    while(i!=j)
    {
        while(a[j]>=temp&&j>i)
            j--;
        if(j>i)
            a[i++]=a[j];
        while(a[i]<=temp&&j>i)
            i++;
        if(j>i)
            a[j--]=a[i];
        
    }
    a[i]=temp;
    quicksort(a,left,i-1);
    quicksort(a,i+1,right);
}
void main()
{
    int a[]={53,12,98,63,18,72,80,46,32,21};
    int i;
    quicksort(a,0,9);
    /*排好序的结果*/
    for(i=0;i<10;i++)
        printf("%4d\n",a[i]);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-02
49 38 65 97 76 13 27 50 按非降序排,
用快速排序实现
解释:用每次取的数据作为分界点,在这之内分成2块
先和最后面的数据比较,当大于时就互换位置,在和前面的数据比较
设置low 和high个指针先与high(也就是最后一个关键字比较)大于就互换位置否则就不换指导换了一次位置后改变high的位置,在与low比较小于就互换直到交换就重置low,在high就这样循环,直到high=low的时候就完成了一次
再在分开的2个区内用同样的方法比较
例如:
先去49 把数据分成 27 38 13 49 76 97 65 50
在取27 ,用相同的方法把 27 38 13排
取76 把76 97 65 50排
取49 先和50比较 小于50 在和27比较,大于27就互换位置
27 38 65 97 76 13 49 50
继续拿49 先和38比较大于就不换 在和65 小于就换位置
27 38 49 97 76 13 65 50
在拿49与13比较,大于就换
27 38 13 97 76 49 65 50
再拿65与97 小于换
27 38 13 49 76 97 65 60
再拿49与76比较,小于不换
一趟后: 27 38 13 49 76 97 65 60
继续;
蛋疼,擦,太难的表达出来了本回答被提问者采纳
第2个回答  2015-05-23
49 38 65 97 76 13 27 50 按非降序排,
用快速排序实现
解释:用每次取的数据作为分界点,在这之内分成2块
先和最后面的数据比较,当大于时就互换位置,在和前面的数据比较
设置low 和high个指针先与high(也就是最后一个关键字比较)大于就互换位置否则就不换指导换了一次位置后改变high的位置,在与low比较小于就互换直到交换就重置low,在high就这样循环,直到high=low的时候就完成了一次
再在分开的2个区内用同样的方法比较
例如:
先去49 把数据分成 27 38 13 49 76 97 65 50
在取27 ,用相同的方法把 27 38 13排
取76 把76 97 65 50排
取49 先和50比较 小于50 在和27比较,大于27就互换位置
27 38 65 97 76 13 49 50
继续拿49 先和38比较大于就不换 在和65 小于就换位置
27 38 49 97 76 13 65 50
在拿49与13比较,大于就换
27 38 13 97 76 49 65 50
再拿65与97 小于换
27 38 13 49 76 97 65 60
再拿49与76比较,小于不换
一趟后: 27 38 13 49 76 97 65 60
继续; \

C语言中快速排序法的原理及应用
一般来说,冒泡法是程序员最先接触的排序方法,它的优点是原理简单,编程实现容易,但它的缺点就是--程序的大忌--速度太慢。附上快速排序代码:include<stdio.h>void quicksort(int a[],int left,int right){ int i,j,temp; i=left; j=right; temp=a[left]; if(left>right...

C语言的快速排序的算法是什么啊?
快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有...

快速排序算法
快速排序(Quicksort)是对冒泡排序的一种改进。然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序...

数据结构C语言--三种以上的排序算法
在指定区间内选择一个中间值mid,将数组分为两部分,一部分比中间值小,一部分比中间值大。然后递归地对两部分进行快速排序。实现逻辑如下:初始化i和j分别为区间两端,然后从中间向两端遍历,将大于中间值的元素交换到右边,小于等于中间值的元素交换到左边。递归调用QSort函数进行排序。二叉查找树插入:...

c语言 排序函数
首先这是一种快速排序的算法,你也应该知道,快速排序就是选择序列中的一个元素作为基准,通过循环找到这个基准最终的位置,并把所有小于这个基准的元素移到这个位置的左边,大于基本的元素移到右边,这样再对这个基准的左右两边分别递归调用自己,最终就能得到排序的结果。再来解释一下这个例子,它选择的基准...

数据架构与算法——C\/C++实现快速排序(Quick Sort)算法【建议收藏...
数据架构与算法中,C\/C++语言下快速排序(Quick Sort)是一种常用且高效的排序算法。它基于分治策略,通过一趟排序将数据划分为较小和较大的两部分,然后递归地对这两部分进行排序,最终实现整个数据序列的有序。快速排序的执行流程可以通过一个具体示例来理解,比如数列a={30,40,60,10,20,50}。在排序...

c语言排序问题
1、冒泡法:比如说有一串数{1,4,6,3,7}先用1与4比较,排序为1,4,再用4与6比较,位置不变,再用6与3比较,交换,再用6与7比较,不变。这样最大的就到了末尾。进行最多n-1次完成。不过这种方法在数字大时比较慢,但是稳定。2、快速排序 快速排序是冒泡排序的改进版,是目前已知的最...

c语言排序的方法
排序主要分为以下几种。1.冒泡排序:通过循环比较前后数的大小进行交换。最后使得数组有序。2.快速排序:首先将第一个数作为一个基准,然后循环,将前半部分大于该数的与后半部分小于该数的进行交换,使得以该数为分界线,前面的小于该数,后面的大于该数,然后分前后两部分继续。

快速排序算法c语言
归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不...

菜鸟提问 c语言关于快速排序
\/*while(i!=j)不要用这种方法判定循环结束,万一i==j-1,i++,j--后 i〉j了,!=这个条件就救不了你了*\/ for(i=s+1,j=t;i<=j;i++,j--)\/*不包括参照数,进行左右阵营站队*\/ { while(j>i && R[j]>=temp)\/*R[j]>=temp不要 = 也行,加了更好,毕竟相等的无论站左站...

相似回答