アルゴリズムの泡の順序付けについての奮闘史
20559 ワード
// --
void bubble(int[] array){
if(array==null){
return;
}
if(array.length<=1){
return;
}
// :( )
// : 0 5 3 7 6
// , 0 3 5 6 7
// : 0 3 5 6 7
for(int i=0;i<array.length-1;i++){
for(int j=0;j<array.length-1;j++){
if(array[j]>array[j+1]){
swap(array,j,j+1);
}
}
}
}
//
// , , , (n-1)*(n-1)
void buddle2(int []array){
if(array==null){
return;
}
if(array.length<=1){
return;
}
boolean is_again=false;
for(int i=0;i<array.length-1;i++){
for(int j=0;j<array.length-1;j++){
if(array[j]>array[j+1]){
swap(array,j,j+1);
is_again=true;
}
}
if(!is_again){
return;
}
}
}
//
// , ,
void buddle3(int[] array){
if(array==null){
return;
}
if(array.length<=1){
return;
}
int cur_end=array.length-1;
int record=0;
boolean is_again=false;
for(int i=0;i<array.length-1;i++){
for(int j=0;j<cur_end;j++){
if(array[j]>array[j+1]){
swap(array,j,j+1);
is_again=true;
record=j;
}
}
cur_end=record;
if(!is_again){
return;
}
}
}
// , ,
void buddle(int [] array){
if(array==null){
return;
}
if(array.length<=1){
return;
}
int cur_start=0;
int cur_end=array.length-1;
int record_start=0;
int record_end=0;
boolean is_again=false;
for(int i=0;i<array.length/2;i++){
for(int j=cur_start;j<cur_end;j++){
if(array[j]>array[j+1]){
swap(array,j,j+1);
is_again=true;
record_end=j;
}
}
if(!is_again){
return;
}
is_again=fale;
cur_end=record_end;
for(int j=cur_end;j>cur_start;j--){
if(array[j]<array[j-1]){
swap(array,j,j+1);
is_again=true;
record_start=j;
}
}
cur_start=record_start;
if(!is_again){
return;
}
}
}
private void swap(int[] arr, int i, int j){
int tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}