排序算法之快速排序算法
2015-07-08 21:12
148 查看
快速排序算法
快速排序算法和冒泡排序算法都属于交换排序算法,其中快速排序算法可以看做是冒泡排序算法的升级版。
快速排序算法的思想:在一列需要排序的数中,首先随机选一个基准数,一般选开始元素。这里我们定义两个变量i和j,我们给i,j取个好听名字,称为赶路人。i,j赶路人分别从最左边和最右边相向赶路。j从最右边的位置开始,若找到一个数比基准数小,就停止。然后i从最左边的位置开始,若找到一个数比基准数大,就停止。然后把i,j当前位置对应的值互换。然后i,j两点继续“赶路”,按照上面的模式,当i和j重复了,就停止赶路。此时在把i对应的值和开始设置的基准数互换,这就找到了开始时基准数的真正位置,此时保证了基准数右边的值不小于基准数,左边的数不大于基准数。其次,把基准位置两边的数,按照上面的规则进行下去,最后一直递归下去,最后就实现了快速排序。
快速排序算法和冒泡排序算法都属于交换排序算法,其中快速排序算法可以看做是冒泡排序算法的升级版。
快速排序算法的思想:在一列需要排序的数中,首先随机选一个基准数,一般选开始元素。这里我们定义两个变量i和j,我们给i,j取个好听名字,称为赶路人。i,j赶路人分别从最左边和最右边相向赶路。j从最右边的位置开始,若找到一个数比基准数小,就停止。然后i从最左边的位置开始,若找到一个数比基准数大,就停止。然后把i,j当前位置对应的值互换。然后i,j两点继续“赶路”,按照上面的模式,当i和j重复了,就停止赶路。此时在把i对应的值和开始设置的基准数互换,这就找到了开始时基准数的真正位置,此时保证了基准数右边的值不小于基准数,左边的数不大于基准数。其次,把基准位置两边的数,按照上面的规则进行下去,最后一直递归下去,最后就实现了快速排序。
void quicksort( int num[],int begin ,int end) { int temp = num[begin];//随机的基准点 int i = begin; int j = end; if (begin >= end)return; while(i!=j) { while(num[j] >= temp && i < j)j--; while(num[i] <= temp && i < j)i++; if(i < j) { int t = num[j]; num[j] = num[i]; num[i] = t; } } num[begin] = num[i]; num[i] = temp; quicksort( num,begin,i - 1); quicksort( num,i + 1,end); } int main() { int a[] ={110,23,56,7,2,5,1,56,90,11,24,5,7,89,12,34,5,99}; quicksort(a,0,17); for(int i = 0;i < 18;i++) printf("%d ",a[i]); getchar(); return 0; }
相关文章推荐
- 毕业后的五年拉开大家差距的原因在哪里?
- c#第五次作业
- Razor模板解密
- [Perl]对*.zip文件操作的记录<一>
- poj 3026 bfs+prim Borg Maze
- 【XML】XL,SL,PL三者之间的区别与联系
- readLine()方法
- 1034. Head of a Gang (30)
- windows 常用软件
- HQL: Hibernate查询语言
- 编写程序时关于字符串时的一些主要函数
- 需要缺少的Web组件才能加载,以及项目加载后显示“不可用”的解决方法
- Snoopy 网页抓取
- C语言中的static
- LeetCode House Robber
- 从头开始建网站(三)DNS
- java中jdk安装配置信息
- freemarker 图片输出、多张图片输出(图片重复原因及解决)
- 如何测试网页的登录页面
- Lintcode解题笔记 - 岛屿的个数