<<编程珠玑>>读书笔记 NO. 11章 Qsort1
来源:互联网 发布:西安美林数据是外包吗 编辑:程序博客网 时间:2024/06/05 05:27
用了一天时间终于调试成功了
理解算法思路卡了一下,实现时大大的卡了一下,尝试了各种方法,桌上摆道具重复算法过程,用圆珠笔,手机,纸飞机,愤怒小鸟胶皮玩具演习排序过程,
后来Debug跟踪发现 watch 变量中 ++m会导致诡异的效果
后来跟踪入swap函数终于发现,没有考虑到 待交换的两个元素 同一索引,即同一个元素,这是不能用^交换,会导致清0效果!!!!!!
思路不写了,饿了吃饭去了,自我记录一下,不要用我的这篇当学习文档
这里有一个GIF动画展示过程
http://en.wikipedia.org/wiki/Quicksort#Simple_version
package org.algorithm;/** * Qsort * @author Administrator * */public class Qsort1 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub int[] arr = {58,43,29,69,2,123,32,1,-2,432,31,44};Qsort1 myqsort = new Qsort1();myqsort.qsort1(arr,0,arr.length-1);//swapByIndex(arr, 1,0 );for(int i=0;i<arr.length;i++){System.out.print(arr[i]);System.out.print(",");}}public void qsort1(int[] _arr,int startIdx,int endIdx){System.out.println("qsort ==== "+_arr);//结束条件if(startIdx>=endIdx){return;}int mid = startIdx;//中心索引 随判断动态移动//第一个元素作为比对的元素 ,目标是以他为中心左右分布/** * 核心思想: * 以第一个元素为参照左右分割 * 第一个元素a1位置不变,第二个元素a2(<=a1)担当巡视职责去分割左右 * 最后再交换a1 a2 * 左右两部分分别递归 */int tmp = 0;for(int i=startIdx+1;i<=endIdx;i++){if(_arr[i]<_arr[startIdx]){mid++;swapByIndex(_arr,i,mid);//tmp = _arr[i];////mid++;//_arr[i]= _arr[++mid];//_arr[mid] = tmp;}}//end for//交换a1,a2 swapByIndex(_arr,startIdx,mid);//tmp = _arr[mid];//_arr[mid] = _arr[startIdx];//_arr[startIdx] = tmp;//左右两个部分递归qsort1(_arr,startIdx, mid-1);qsort1(_arr,mid+1,endIdx);}/** * swap value * elegant haha * @param a * @param b */private void swapByIndex(int[] _arr,int indexA,int indexB){/** * 一定要判断,否则 会把元素清0 */if(indexA==indexB){return;}_arr[indexA]^=_arr[indexB];_arr[indexB]^=_arr[indexA];_arr[indexA]^=_arr[indexB];}}
- <<编程珠玑>>读书笔记 NO. 11章 Qsort1
- 编程珠玑---读书笔记---第11章排序
- 《编程珠玑》--读书笔记12章:取样问题
- 编程珠玑第九章-代码优化 读书笔记
- 《编程珠玑》读书笔记
- 《编程珠玑》读书笔记2
- 《编程珠玑》 读书笔记
- 《编程珠玑》读书笔记开场白
- 《编程珠玑》第一章读书笔记
- 编程珠玑读书笔记
- 《编程珠玑》读书笔记 part1
- 《编程珠玑》读书笔记 part2
- 《编程珠玑》读书笔记 part3
- 编程珠玑 读书笔记
- 编程珠玑读书笔记
- 《编程珠玑》读书笔记第一章
- 第一章 开篇 - 编程珠玑 - 读书笔记
- [编程珠玑读书笔记] 插入排序
- 使用proguard.cfg工具来混淆代码后,自己的项目出了好些问题
- DirectShow下载安装配置心得
- 初始化一个指针的方法
- MFC应用程序中处理消息的顺序,创建窗口的过程关闭窗口的顺序(非模态窗口),打开模式对话框的函数调用顺序
- 汉诺塔
- <<编程珠玑>>读书笔记 NO. 11章 Qsort1
- 【iOS-Cocos2d游戏开发】解决滚屏背景/拼接地图有黑边(缝隙)
- string浅拷贝及其在dll中运用的注意事项
- WebApp本地存储 (离线缓存策略策略)
- virtual析构函数(作用)
- C#中的一些提示
- 【C++ STL】算法 <algorithm>中各种算法解析
- 对JSP、JAVASCRIPT、SERVLET之间数据传递的总结
- easysize.h 文件,直接复制粘贴新建一个easysize.h文件就行了