快速排序(分治算法)
来源:互联网 发布:朝鲜绑架 知乎 编辑:程序博客网 时间:2024/06/05 06:49
步骤
1.每次将序列中的第一个元素作为一个一个基准,
2.在序列的左边找到第一个比基准元素大的值,在序列的右面找到第一个比序列小的值,交换这两个值,使得在这两个值的两边元素分别小于、大于基准元素。继续在序列中寻找,之后再交换,最终实现在某个位置,该元素的值(包括该元素)都比基准元素小,该元素的右面的元素值都比基准元素大。将这个值和基准元素进行交换,实现在基准元素的左边,元素值都比基准元素小,基准元素的右面都比基准元素大。
3.将序列分为三部分:基准元素的左边、基准元素、基准元素的右边。
进行分治。最终实现排序
算法实现:
void quickSort(int data[], int low, int high){ //判断当前序列中是否有元素 if (low < high){ //将序列的两端都戳上指针 int left = low; int right = high-1; //将序列的第一个元素作为基准值 //通过循环实现在某个位置,该位置的左面(包括该位置)都小于基准值,改位置的右面都大于基准值 while (left < right){ //通过循环找到序列左面第一个比基准值大的位置 for (; left < high&&data[left] <= data[low];left++); //通过循环找到序列的右面第一个比基准值小的元素 for (; right > low&&data[right]>data[low];right--); if (left < right){ //说明在当前序列中left和right都找到了符合条件的位置 //交换data[left]和data[right]的值实现在left的左面元素值都比基准值小,right的右面都比基准值大 int temp = data[left]; data[left]=data[right]; data[right] = temp; } } //通过交换data[low]和datap[right]的值实现在基准值的左面元素都比基准值小,基准值的右面元素都比基准值大 int temp = data[low]; data[low] = data[right]; data[right] = temp; //左递归调用 quickSort(data, low, right); //右递归调用 quickSort(data, right + 1, high); }}
调试:
int main(void){ int data[8] = { 3, 2, 5, 8, 4, 7, 6, 9 }; quickSort(data, 0, 8); for (int i = 0; i < 8; i++){ printf("%d ",data[i]); } return 0;}
调试结果:
阅读全文
0 0
- 快速排序(分治算法)
- 排序算法--快速排序(分治法)
- 分治算法-快速排序
- 分治算法----快速排序
- 快速排序-分治算法
- 分治算法---快速排序
- 分治算法 快速排序
- 分治算法二(快速排序)
- 分治算法三(随机化快速排序)
- (四)算法--排序算法分治 快速排序
- 分治算法之快速排序
- 分治算法之快速排序
- 分治法-----快速排序算法
- 分治算法之快速排序
- 快速排序算法-分治思想
- 分治算法实现快速排序
- 分治算法之快速排序
- 分治算法之快速排序
- Android7.0适配教程,心得
- Java-反射(一) Class类的使用
- C 和指针第一次考试(改正)
- C语言学习—数组
- python生成器——廖雪峰教程笔记
- 快速排序(分治算法)
- Android 支付宝后台支付流程
- android 基础知识 四大组件之Activity(一)
- SYN和FIN同时设置攻击
- 洛谷P1060 开心的金明(DP,0-1背包)
- (九)Java设计模式之装饰模式
- RecyclerView多布局实现
- 使用jsp读取TXT格式文件
- 第1步:数据库表