快排三路划分
来源:互联网 发布:淘宝美工招聘兼职 编辑:程序博客网 时间:2024/05/22 06:25
RT,代码如下;
//快排三路划分,解决大量重复元素问题int Partition_3(int A[], int low , int high) {//low,high移动指针;left,right保存左右边界int i,j,left,right;left = i = low;j = high;int pivot = A[low];//第一个为枢轴元素while (low < high) {while (low<high && A[high]>=pivot) {if(A[high]==pivot){swap(A[high],A[j]);j--;}high--;} A[low] = A[high];while (low<high && A[low]<=pivot) {if(A[low]==pivot){swap(A[low],A[i]);i++;}low++;}A[high] = A[low];}//最终low和high相遇,三个指针将数组分成3部分://left->i(左边和pivot相等的元素);//i->low(high)(比pivot小的元素);//low(high)->j(比pivot大的元素);//j->right(右边和pivot相等的元素);//执行交换,将等于pivot的元素全部放到中间(类似数组循环移位)int a,b;for (a=i,b=low;a<(i+low)/2;a++){swap(A[a],A[b]);}for (a=left,b=low;a<(left+low)/2;a++){swap(A[a],A[b]);}//左边换完for (a=low,b=j;a<(low+j)/2;a++){swap(A[a],A[b]);}for (a=low,b=right;a<(low+right)/2;a++){swap(A[a],A[b]);}//右边换完return low;}
0 0
- 快排三路划分
- 划分
- 划分
- 子网划分
- 整数划分
- vlan 划分
- 星座划分
- 内存划分
- 平面划分
- 划分算法
- 子网掩码划分
- 整数划分
- 划分工作
- 网络地址划分
- 子网划分
- 模块划分
- 整数划分
- 整数划分
- Ruby on rails初体验(一)
- 外联接、自联接与联合
- hexo配置主题发表文章
- Linux中固定ip地址
- PASSION之CSS3中2D,3D转化
- 快排三路划分
- android fragment 详解(二)
- poj2718
- JavaScript字符串函数
- STL中的内存分配器 (一)
- 程序员文史综合
- lua调试器与编辑器开源项目luacode(源自decoda)
- coursera的经历感想
- C++位操作