JAVAにおける基本的な4つの並べ替え(発泡体の並べ替え、選択順序、挿入順序、クイックソート)
8265 ワード
泡の並べ替え
/****は行った後、隣の二つの数を順番に比較して、大きな数を後ろに置いてください。循環すると、現在の最後尾に現在の最大値が得られます。*/
順序付けと泡並べ替えの違いに注意してください。泡並べ替えは、隣接する2つの順序が合法的でない要素の位置を順次交換することによって、現在の最小要素を適切な位置に配置します。一方、選択順序付けは、巡回ごとに現在の最小(大)要素の位置を覚えています。最後に交換操作だけで、適切な位置に配置できます。
/***は、配列から一番小さい要素を見つけ、最初の位置の要素と交換します。*2番目の位置から、最小要素と2番目の位置の要素が入れ替わります。*array.length-1の小さな要素を選択するまで、残りの最大要素は自動的に最後のビットになります。*/
/****は、第二の要素から、現在の要素を前の対応する位置に挿入し、現在の要素iと前の要素を秩序正しい配列に形成します。比較規則:通常:第1の要素から始まり、現在の要素iが秩序配列中の要素jより小さい場合、この要素から秩序配列を順に後のビットに移動し、現在の要素iをこの要素j位置に配置する。(挿入)簡易:順序配列の最後の要素から開始し、現在の要素iがこの要素jより小さい場合、現在の要素とこの要素を交換する。
//****カクテルは泡立ち順のアップグレード版で、この並べ替えは左から右へ最大値を探してから、右から左へ最小値を探して、カクテルのように混ぜて左右に循環します。場合によっては、発泡秩序より優れていて、シーケンス(67,69,75,88)を例にとって、カクテル順序は2回(昇順・降順の各回)のシーケンスにアクセスするだけで並べ替えができますが、発泡体順序を使用する場合は4回必要です。
/****は行った後、隣の二つの数を順番に比較して、大きな数を後ろに置いてください。循環すると、現在の最後尾に現在の最大値が得られます。*/
public class orderBy1 {
public static void main(String[] args) {
int score[] = {67, 69, 75, 88};
for(int i =0;i < score.length - 1;i++)
{
for(int j = 0;j < score.length - 1-i;j++)// j 0,
{
if(score[j] < score[j+1])
{
int temp = score[j];
score[j] = score[j+1];
score[j+1] = temp;
}
}
}
for (int i = 0; i out.println(score[i]);
}
}
}
並べ替えを選択順序付けと泡並べ替えの違いに注意してください。泡並べ替えは、隣接する2つの順序が合法的でない要素の位置を順次交換することによって、現在の最小要素を適切な位置に配置します。一方、選択順序付けは、巡回ごとに現在の最小(大)要素の位置を覚えています。最後に交換操作だけで、適切な位置に配置できます。
/***は、配列から一番小さい要素を見つけ、最初の位置の要素と交換します。*2番目の位置から、最小要素と2番目の位置の要素が入れ替わります。*array.length-1の小さな要素を選択するまで、残りの最大要素は自動的に最後のビットになります。*/
public class orderBy2 {
public static void main(String[] args) {
int arr[] = {67, 69, 75, 88};
int minIndex, temp;
for (int i = 0; i < arr.length - 1; i++) {
minIndex = i; //
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) { //
· minIndex = j; //
}
}
// ( ), ,
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
for (int i = 0; i out.println(arr[i]);
}
}
}
並べ替えの挿入/****は、第二の要素から、現在の要素を前の対応する位置に挿入し、現在の要素iと前の要素を秩序正しい配列に形成します。比較規則:通常:第1の要素から始まり、現在の要素iが秩序配列中の要素jより小さい場合、この要素から秩序配列を順に後のビットに移動し、現在の要素iをこの要素j位置に配置する。(挿入)簡易:順序配列の最後の要素から開始し、現在の要素iがこの要素jより小さい場合、現在の要素とこの要素を交換する。
public class orderBy3 {
public static void main(String[] args) {
int arr[] = {67, 69, 75, 88};
int pos,temp;
for(int i=1;ilength;i++){
pos = i;
while(pos!=0&&arr[pos]pos-1]){
temp = arr[pos];
arr[pos] = arr[pos-1];
arr[pos-1] = temp;
pos--;
}
}
for (int i = 0; i length ; i++) {
System.out.println(arr[i]);
}
}
}
高速並べ替え(カクテルの並べ替え)//****カクテルは泡立ち順のアップグレード版で、この並べ替えは左から右へ最大値を探してから、右から左へ最小値を探して、カクテルのように混ぜて左右に循環します。場合によっては、発泡秩序より優れていて、シーケンス(67,69,75,88)を例にとって、カクテル順序は2回(昇順・降順の各回)のシーケンスにアクセスするだけで並べ替えができますが、発泡体順序を使用する場合は4回必要です。
public class orderBy4 {
public static void main(String[] args) {
int arr[] = {67, 69, 75, 88};
// , ...
boolean changed;
for(int i = 0;i < arr.length/2;i++){
changed = false;
// , , .
for(int j = i;j < arr.length-1-i;j++){
if(arr[j]>arr[j+1]) {
swap(arr,j,j+1);
changed =true;
}
}
if(!changed){
break;
}
for(int j = arr.length-1-i; j > i; j--){
if(arr[j]1]) {
swap(arr,j,j-1);
changed = true;
}
}
if(!changed){
break;
}
}
for (int i = 0; i out.println(arr[i]);
}
}
public static void swap(int[] arr, int pos1, int pos2){
int temp = arr[pos1];
arr[pos1] = arr[pos2];
arr[pos2] = temp;
}
}