划分--快速排序
2009-11-30 23:25
232 查看
代码很简单。就不解释了。就说说自己写代码时遇到的问题吧。
无辜的总有一个0值,插入到 左边;
12 10 3 198 120 8 54 7
----------------
12 10 3 0 0 8 54 7
只因为,数组长度是10,但是只有8个数据,所以就有2个数组元素为0
package high;
public class PartinSort {
private int a[];
public int elems; //数据的长度,不是数组的长度
private int maxSize;
public PartinSort(int maxSize){
this.maxSize = maxSize;
a = new int[maxSize];
elems =0;
}
public void add(int i){
if(elems==maxSize){
return;
}
a[elems] = i;
elems ++;
}
public void display(){
for(int i=0;i<elems;i++){
System.out.print(a[i]+" ");
}
System.out.println();
}
// 注意传值调用陷阱
public void swap(int i, int j){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public int partinIt(int left,int right,int num){
int leftPrev = left -1;
int rightBack = right +1;
while(true){
while(a[++leftPrev]<num){
}
while(a[--rightBack]>num){
}
if(leftPrev >= rightBack){
break;
}else{
swap(leftPrev,rightBack);
}
}
return leftPrev;
}
public static void main(String args[]){
PartinSort array = new PartinSort(10);
array.add(12);
array.add(10);
array.add(3);
array.add(198);
array.add(120);
array.add(8);
array.add(54);
array.add(7);
array.add(1);
array.add(111);
array.add(4);
array.display();
System.out.println(array.partinIt(0, 9, 100));
array.display();
}
}
本文出自 “简单” 博客,请务必保留此出处http://dba10g.blog.51cto.com/764602/237051
无辜的总有一个0值,插入到 左边;
12 10 3 198 120 8 54 7
----------------
12 10 3 0 0 8 54 7
只因为,数组长度是10,但是只有8个数据,所以就有2个数组元素为0
package high;
public class PartinSort {
private int a[];
public int elems; //数据的长度,不是数组的长度
private int maxSize;
public PartinSort(int maxSize){
this.maxSize = maxSize;
a = new int[maxSize];
elems =0;
}
public void add(int i){
if(elems==maxSize){
return;
}
a[elems] = i;
elems ++;
}
public void display(){
for(int i=0;i<elems;i++){
System.out.print(a[i]+" ");
}
System.out.println();
}
// 注意传值调用陷阱
public void swap(int i, int j){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public int partinIt(int left,int right,int num){
int leftPrev = left -1;
int rightBack = right +1;
while(true){
while(a[++leftPrev]<num){
}
while(a[--rightBack]>num){
}
if(leftPrev >= rightBack){
break;
}else{
swap(leftPrev,rightBack);
}
}
return leftPrev;
}
public static void main(String args[]){
PartinSort array = new PartinSort(10);
array.add(12);
array.add(10);
array.add(3);
array.add(198);
array.add(120);
array.add(8);
array.add(54);
array.add(7);
array.add(1);
array.add(111);
array.add(4);
array.display();
System.out.println(array.partinIt(0, 9, 100));
array.display();
}
}
本文出自 “简单” 博客,请务必保留此出处http://dba10g.blog.51cto.com/764602/237051
相关文章推荐
- 快速排序 和 把一个无序的整形数组分成两部分(以数组第一个数为基准进行划分)
- 快速排序的三者取中划分
- 二分法查找和快速排序 二分法是分治算法的一种特殊形式,利用分治策略求解时,所需时间取决于分解后子问题的个数、子问题的规模大小等因素,而二分法,由于其划分的简单和均匀的特点,是查找数据时经常采用的一种有
- 快速排序的划分算法的总结和思考
- 快速排序的三路划分法
- 笔试算法题(55):快速排序实现之三路划分, 三元中值法和插入排序处理小子文件
- 快速排序的Hoare划分
- 高级排序-快速排序-利用三数据取中划分的快速排序算法
- 快速排序的最早划分方法:Hoare划分
- 快速排序 三平均划分
- 快速排序的划分及其扩展
- 快速排序-两种常见的划分
- 微软面试题:三路划分快速排序---针对重复关键字的改进
- 快速排序 (解决小划分文件)
- 快速排序的实现(三种划分元素的实现,双指针
- 划分算法与快速排序
- 快速排序-几种不同的划分方法
- 快速排序之划分(java)
- Ackerman函数的递归、全排列的递归实现、整数划分的递归、二分搜索的递归、合并排序的递归、.快速排序
- 快速排序与其中的划分算法