划分一个整形数组,把负数放在左边,零放在中间,正数放在右边
2015-06-15 10:25
896 查看
原理和快速排序类似,只是不需要确定每个元素的顺序,只需要确定每个区域的位置。
执行结果:
func main() { // 问题描述:划分一个整形数组,把负数放在左边,零放在中间,正数放在右边 arr := []int{0, 2, 4, 3, 1, 0, -3, -1, -2} fmt.Printf("原数组: %v \n", arr) low := 0 // 负数区域,指向负数区域后的第一个位置 mid := 0 // 0区域,指向0区域后的第一个位置,也是当前遍历位置 hig := len(arr) - 1 // 正数区域,指向区域前的第一个位置 for mid <= hig { // 当行进到正数区域前停止 cur := arr[mid] if cur < 0 { // 当前元素添加到负数区域并向前进一格 arr[mid], arr[low] = arr[low], arr[mid] // 有可能和自身交换 mid++ low++ } else if cur == 0 { mid++ } else { // 加入到正数区域,mid不减一,因为arr[hig]并不知道是属于哪个区域 arr[mid], arr[hig] = arr[hig], arr[mid] hig-- } } fmt.Printf("结果: %v \n", arr) }
执行结果:
原数组: [0 2 4 3 1 0 -3 -1 -2] 结果: [-2 -1 -3 0 0 1 3 4 2]
相关文章推荐
- jq禁止文本内容复制粘贴
- linux svn服务器搭建、客户端操作、备份与恢复
- 算法常用公式总结
- 内存映射
- 互联网人如何拓展自己的人脉
- swift1 > start
- linux svn服务器搭建、客户端操作、备份与恢复
- 【Java】ArraytList [2]
- n a^o7 !
- matlab代码到C++代码转化及使用全攻略
- SVN提交代码需要注意的地方
- Swoole 高性能网络通信框架
- jquery $.each遍历json数组方法
- Python代码缩进
- 全球六大国际域名解析量统计报告(6月11日)
- Sublime Test 解决 报please wait a bit while pyV8 binary 错误
- mmap()内存分配函数
- 黑马程序员——Java基础—线程
- 非常详细的测试unity与android之间的通讯操作(一直activity那块还是有问题,一直进不来android界面!)
- 科普:程序是怎么执行的