「二分排序java」二分排序Java
今天给各位分享二分排序java的知识,其中也会对二分排序Java进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
java二分排序算法是不是稳定
稳定
packagecom.guxia;
publicclassTest {
publicstaticvoidmain(String[] args) {
int[]a={4,2,1,6,3,6,0,-5,1,1};
inti,j;
intlow,high,mid;
inttemp;
for(i=1;i10;i++){
temp=a[i];
low=0;
high=i-1;
while(low=high){
mid=(low+high)/2;
if(a[mid]temp)
high=mid-1;
else
low=mid+1;
}
for(j=i-1;jhigh;j--)
a[j+1]=a[j];
a[high+1]=temp;
}
for(i=0;i10;i++){
System.out.printf("%d",a[i]);
}
}
}
java如何做到第二次排序不应用第一次排序的结果
做不到。
基本的二次排序,以按照两个字段排序为例,先按第一字段升序,再按第二字段降序,二次排序的核心是把原来的keyvalue对组合成key,称为newkey,value还是value,与原来的wordcount相比,多了一个分组步骤,就是把newkey中的第一个字段相同的数据放到一起,再按第二个字段排序。
java 二分法 排序
二分排序就是用先用二分查找法来查某一个元素,然后再用别的排序算法来进行排序。
package insert;
public class InsArrayApp {
public static void main(String[] args) {
int size = 100;
InsArray arr = new InsArray(size);
arr.insert(10);
arr.insert(9);
arr.insert(8);
arr.insert(7);
arr.insert(6);
arr.insert(10);
arr.insert(9);
arr.insert(8);
arr.insert(5);
arr.insert(4);
arr.insert(3);
arr.insert(2);
arr.insert(1);
arr.display();
// arr.insertSort();
// arr.display();
// System.out.println(arr.median());
// arr.noDups();
arr.noDups2();
arr.display();
}
}
class InsArray {
private int[] a;
private int nElems;
public InsArray(int size) {
a = new int[size];
nElems = 0;
}
public void insert(int value) {
a[nElems] = value;
nElems++;
}
public void display() {
for (int i = 0; i nElems; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
}
public void insertSort() {
int out, in;
int copy = 0;
int compare = 0;
/* for(out = 1;outnElems;out++){
int tmp = a[out];
in = out;
while(in0a[in-1]=tmp){
a[in] = a[in-1];
--in;
}
a[in] = tmp;
}*/
for(out = 1;outnElems;out++){
int tmp = a[out];
in = out;
while(in0){
if(a[in-1]=tmp){
a[in] = a[in-1];
--in;
++copy;
++compare;}
else{
break;
}
}
++compare;
a[in] = tmp;
}
System.out.println("copy:" + copy + "compare:" + compare);
}
public int median(){
insertSort();
int m = nElems/2;
return a[m];
}
public void noDups(){
insertSort();
/*
InsArray tmp = new InsArray(nElems);
for(int i = 0;inElems;i++){
for(int j = i+1;jnElems;j++)
if(a[i] == a[j]){
a[j] = -1;
}
if(a[i]!=-1)
tmp.insert(a[i]);
}
*/
InsArray tmp = new InsArray(nElems);
int i;
for(int j = 0;jthis.nElems;j++){
/*if(tmp.nElems==tmp.find(this.a[j])) //binary find
tmp.insert(this.a[j]);
else
continue;*/
for( i = 0; i tmp.nElems; i++) { // for each element
if(tmp.a[i]==this.a[j]) // found searchKey?
break;
}
if(i==tmp.nElems) // no
tmp.insert(this.a[j]);
}
this.a = tmp.a;
this.nElems = tmp.nElems;
}
public int find(long searchKey) {
int lowerBound = 0;
int upperBound = nElems-1;
int curIn;
while(true) {
curIn = (lowerBound + upperBound)/2;
if(a[curIn]==searchKey)
return curIn;
else if(lowerBoundupperBound)
return nElems;
else {
if(a[curIn]searchKey)
upperBound = curIn-1;
else
lowerBound = curIn+1;
}
}
}
public void noDups2(){
insertSort();
for(int i = 0;inElems;i++){
for(int j = i+1;jnElems;j++)
if(a[i] == a[j]){
a[j] = -1;
}
}
display();
int index = 0;
for(int i=0;inElems;i++){
if(a[i]!=-1){
index++;
}else{
for(int j=index+1;jnElems;j++){
if(a[j]!=-1){
a[index] = a[j];
a[j]=-1;
index++;
break;
}
}
}
}
nElems = index;
}
}
上面的代码,是我以前敲的,有个find()方法是二分查找,然后再用插入排序去进行排序。
java 二分法排序
首先取第一个12,其它元素比12小的放左边,比12大的放右边,这样2,11,12,56,77,34
原来的数组就变成了两个部分2,11,12和56,77,34
两个方法按照上面的步骤递归排,比如第二部分56,77,34
取第二部分的第一个56,比它小的放左边,比它大的放右边,这样34,56,77
这样1个数组,分成2各部分,再分成4各部分,一直下去,直到排完
要用到递归,二分法就是这样
关于二分排序java和二分排序Java的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。