快速排序
来源:互联网 发布:ipad好用软件 编辑:程序博客网 时间:2024/06/07 03:53
快速排序
思路
先找一个基准数,通常是第一个,将所有比基准数大的放在右边,比基准数小的放在左边,然后再排序左边部分和右边部分。如何找到这个位置呢,定义两个指针i,j,i指向第一个,j指向最后一个,j从后往前移动,直到找到小于基准数的位置停下,然后i向后移动直到找到大于基准数的位置,交换两个数,j和i继续按什么方法移动,直到i和j相遇,就是基准数的位置。
代码
#include <stdio.h>#define LEN 9int a[LEN] = {2, 4, 5, 6, 3, 4, 2, 9, 10};void quicksort(int left, int right) { int i, j, t, temp; if (left > right) return; temp = a[left]; i = left; j = right; while(i != j) { while(a[j] >= temp && i < j) j--; while(a[i] <= temp && i < j) i++; if (i < j) { t = a[i]; a[i] = a[j]; a[j] = t; } } a[left] = a[i]; a[i] = temp; quicksort(left, i-1); quicksort(i+1, right);}int main(){ int i, j, temp; quicksort(0, LEN-1); for (i = 0; i < LEN; ++i) { printf("%d ", a[i]); } return 0;}
时间复杂度
最坏的情况下,是相邻的两个数进行了交换。因此快速排序的最差时间复杂度和冒泡排序是一样,都是 O(N^2),它的平均时间复杂度为 O (NlogN)。
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- scala解决八皇后问题
- 如果你的错误是 javax.servlet.UnavailableException: Parsing error processing resource path /WEB-INF/struts-c
- iOS 关于tableView cell的分割线的一些设置
- js 和 安卓互相调用
- 如何介绍你的项目
- 快速排序
- 为AppDelegate分层的面向服务架构的 SOAComponentAppDelegate (AppDelegate 回调分层)
- 小米手机退出app后收不到极光推送消息
- 排序字段不要用varchar类型
- 跟据某天日期获取农历或者节假日信息
- Java流编程实例之九--加密流
- logback异步输出日志
- 软键盘遮挡登录按钮的处理方法
- ImageView.ScaleType / android:scaleType