快排实现时候的一个逻辑错误
2016-01-11 17:02
253 查看
#include"header_file.h" using namespace std; void swap(int a,int b) { int t; t=a; a=b; b=t; } void quick_sort(int a[],int low,int high) { if(low>=high) return; int first; int last; first=low; last=high; int x; x=a[low]; while(low<high) { while(low<high&&a[high]>=x) { high--; } swap(a[low],a[high]); cout<<i<<" "<<low<<" low"<<" "<<high<<endl; while(low<high&&a[low]<=x) { low++; } swap(a[high],a[low]); cout<<i<<" "<<low<<" high"<<" "<<high<<endl; } if(first<low-1) quick_sort(a,first,low-1); if(last>low+1) quick_sort(a,low+1,last); } int main(void) { int a[7]={4,3,6,7,2,1,5}; quick_sort(a,0, sizeof(a) / sizeof(a[0]) - 1); cout<<"test"<<endl; for(int i=0;i<7;i++) cout<<a[i]<<" "; }
执行程序会发现在算法排序的地方无限循环,想了半天才知道是33和41行的位置,不管while循环是否执行都会执行swap语句。逻辑错误!
只能换种方法,改成大家最常见的那种就好了
void quick_sort(int a[],int low,int high) { if(low>=high) return; int first; int last; first=low; last=high; int x; x=a[low]; while(low<high) { while(low<high&&a[high]>=x) { high--; } a[low]=a[high]; // cout<<i<<" "<<low<<" low"<<" "<<high<<endl; while(low<high&&a[low]<=x) { low++; } a[high]=a[low]; // swap(a[high],a[low]); // cout<<i<<" "<<low<<" high"<<" "<<high<<endl; } a[low]=x; if(first<low-1) quick_sort(a,first,low-1); if(last>low+1) quick_sort(a,low+1,last); }
这里就不是交换了,直接赋值,然后最后给a[low]赋值。
很低级的错误
相关文章推荐
- mysql权限丢失
- sysctl对Linux内核/网络的设置说明
- 日期处理
- ava.lang.UnsatisfiedLinkError: at com.baidu.mapapi.SDKInitializer.initialize(Unknown Source)保准问题解决
- UNIX 回射程序
- 使用CAShapeLayer实现复杂的View的遮罩效果
- 直线生成算法
- IOS项目结构介绍
- 每天一点小知识002-玩kinectwrapper的一些记录
- 2015年总结和2016年计划
- Neural Networks and Deep Learning学习笔记ch1 - 神经网络
- 华为机试——去除重复子串并排序
- Python篇----命令行调用、输出log日志并打包的脚本
- Web Essentials之Browser Link
- android 沉浸式状态栏
- Visual format language
- oc字典
- leetcode 15. 3Sum 双指针
- 字符串HASH模板
- 墙内无缝更新Android SDK