「二分排序java」二分排序Java

博主:adminadmin 2023-03-21 19:02:07 374

今天给各位分享二分排序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的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。