发布网友
共5个回答
懂视网
快速排序原理是:先从数据序列中选一个元素,并将序列中所有比该元素小的元素都放到它的右边或左边,再对左右两边分别用同样的方法处之直到每一个待处理的序列的长度为1,处理结束。
热心网友
快排的思想是(假设都是从小到大排列):
选一个值作为“轴值”,所有小于轴值的都移动到轴值左边,所有大于轴值的都移动到轴值右边。这一步是让数列变得较为有序
然后分别再对轴值的左边、右边分别进行快排,一步一步提高整个数列的有序程度,直到最后完全有序。
轴值的选取有多种方式,这里就假设是选正中间的一个
70,75,82,90,23,16,10,68
选择轴值 90,排列后得到:
70,75,82,23,16,10,68,(90)
括号括起来的我表示是轴值,这里运气不好,轴值选中了一个最大的
下面对轴值左边排序,在选择轴值为23:
16,10,(23),70,75,82,68
再分别对16, 10 和 70,75,82,68进行排序
一般快排在待排序的数字个数较少时,会选取其它排序来进行排列,比如插入排序。这里16,10数字个数已经太少,用插入排序排成10, 16
然后对 70,75,82,68进行排序……
整个排序过程就这样
热心网友
最快的是二分法(运算速度最快),最简单的事冒泡法。
二分法为例:从两端选取各自草中间靠拢,每次排除最大的,或者最小的。这种方法在算法上是较快的。
冒泡法就是:从[0]到[n],第一次让[0]和后面的所有数字相比较,小的就换给[0]。第二次[1]和后面的比较小的就换给[1]………………以此类推,得出从小到大的排列了……他和沉底法是一样的道理只不过一个向上一个向下
热心网友
#include <sdtio.h>
int cmp(const void*x,const void*y)
{
return *(int*)x-*(int*)y;
}
int main()
{
int a[8]={70,75,82,90,23,16,10,68};
qsort(a,8,sizeof(int),cmp);
for(i=0;i<8;i++)
printf("%d\n",a[i]);
return 0;
}
qsort中的a表示数组名名字也是数组第一个元素的地址,8表示待排元素的个数,sizeof(int)表示元素类型,如果是char数组,就用sizeof(char),cmp是个函数,返回两两数的差,这样是递增排序,若要递减,把cmp的return相减的两个数调换即可
热心网友
快速排序的原理和实现(纯白话文口述)
看看这个博客,讲的很透彻,通俗易懂,望对你有用