写出快速排序算法(排序算法有哪些,简述快速排序的核心)
本文目录
排序算法有哪些,简述快速排序的核心
简单的: 冒泡,选择排序,插入排序,桶排序,
复杂点的: 堆排序,归并排序,快速排序,
还有 基数排序,计数排序(这两个我还没接触到,不懂)
快速排序核心:
每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样只能在相邻的数之间进行交换,交换的距离就大得多了。因此总的比较和交换次数就少了,速度自然就提高了。
图片及快速排序简述来源于《啊哈算法》
帮我写一个快排的算法
用什么语言?下面是Java的快排算法。public class QuickSort { /** * 快速排序 */ public void quickSort(String+" "); } } }
快速排序算法的排序演示
假设用户输入了如下数组: 下标 0 1 2 3 4 5 数据 6 2 7 3 8 9 创建变量i=0(指向第一个数据), j=5(指向最后一个数据), k=6(赋值为第一个数据的值)。我们要把所有比k小的数移动到k的左面,所以我们可以开始寻找比6小的数,从j开始,从右往左找,不断递减变量j的值,我们找到第一个下标3的数据比6小,于是把数据3移到下标0的位置,把下标0的数据6移到下标3,完成第一次比较: 下标 0 1 2 34 5 数据 3 2 7 6 8 9 i=0 j=3 k=6接着,开始第二次比较,这次要变成找比k大的了,而且要从前往后找了。递加变量i,发现下标2的数据是第一个比k大的,于是用下标2的数据7和j指向的下标3的数据的6做交换,数据状态变成下表: 下标 0 1 2 3 4 5 数据 3 2 6 7 8 9 i=2 j=3 k=6称上面两次比较为一个循环。接着,再递减变量j,不断重复进行上面的循环比较。在本例中,我们进行一次循环,就发现i和j“碰头”了:他们都指向了下标2。于是,第一遍比较结束。得到结果如下,凡是k(=6)左边的数都比它小,凡是k右边的数都比它大: 下标 0 1 2 3 4 5 数据 3 2 6 7 8 9 如果i和j没有碰头的话,就递加i找大的,还没有,就再递减j找小的,如此反复,不断循环。注意判断和寻找是同时进行的。然后,对k两边的数据,再分组分别进行上述的过程,直到不能再分组为止。注意:第一遍快速排序不会直接得到最终结果,只会把比k大和比k小的数分到k的两边。为了得到最后结果,需要再次对下标2两边的数组分别执行此步骤,然后再分解数组,直到数组不能再分解为止(只有一个数据),才能得到正确结果。 在c++中可以用函数qsort()可以直接为数组进行排序。 用 法:void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));参数: 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序
如何用PB写一个快速排序的算法呢
#include 《stdio.h》#include 《stdlib.h》/*快速排序算法qsort需要使用到的比较函数,函数地址传入qsort如果第一个参数指向的数比第二个大,返回1,然后再qsort中发生交换返回0或-1的情况均不发生数组中的数据交换 */int intcmp(const void *pa, const void *pb){ int a = *(int*)pa; int b = *(int*)pb; return((a 》 b) ? 1 : ((a == b) ? 0 : -1));/*从小到大排序,若要从大到小,返回条件相反即可 */}intmain(void){ int i; int arr = ; qsort(arr, 6, sizeof(int), intcmp); for (i = 0; i 《 6; ++i) printf("%d\t", arr); printf("\n"); system("pause"); return 0; }
用C语言编写一个快速排序算法 输入10个数
1、“快速排序法”使用的是递归原理,下面一个例子来说明“快速排序法”的原理。首先给出一个数组{53,12,98,63,18,72,80,46, 32,21},先找到第一个数--53,把它作为中间值,也就是说,要把53放在一个位置,使得它左边的值比它小,右边的值比它大。{21,12,32, 46,18,53,80,72,63,98},这样一个数组的排序就变成了两个小数组的排序--53左边的数组和53右边的数组,而这两个数组继续用同样的方式继续下去,一直到顺序完全正确。一般来说,冒泡法是程序员最先接触的排序方法,它的优点是原理简单,编程实现容易,但它的缺点就是速度太慢。2、快速排序代码:
#include《stdio.h》void quicksort(int a,int left,int right){ int i,j,temp; i=left; j=right; temp=a; if(left》right) return; while(i!=j) { while(a》=temp&&j》i) j--; if(j》i) a; while(a《=temp&&j》i) i++; if(j》i) a; } a=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);}
更多文章:
武魂至尊礼包(武魂公会至尊卡预约礼包序列号:WB01-2295-8113-5658)
2024年1月11日 04:00
海豹体育直播直播(炉石传说,安德罗妮把哀绿绮思喊成唐海豹,是哪一场黄金赛)
2024年6月4日 17:48
Android各个版本的代号?Android froyo 是什么系统
2024年3月4日 05:30