ソート問題バブルソートの最適化
1688 ワード
プロジェクトではソートの問題がよく使われています.既存のバブルソート、高速ソート、二分法、集計ソート、スタックソートなど、いくつかのソートアルゴリズムがよく使われています.一部のソート、例えば集計ソートはデータ量が非常に膨大な場合に適していますが、私たちのプロジェクトでは数の少ないソートでは、簡単にバブルソートで終わる人が多いかもしれません.データが少ない場合、バブルソートは他のソートよりも遅くないため、ソートに触れると、バブルソートに慣れることが多い.
私はプロジェクトでソートアルゴリズムに接触し、プロジェクトのアルゴリズムを最適化する計画を立てたとき、成熟したアルゴリズムについて理解しました.アルゴリズムの優劣は,その遍歴過程が何回経過したかを見ることであり,nがキューの長さであれば,バブルソートはnのn次方次を遍歴し,すでに最も長いアルゴリズムである.その後、私自身はソートのいくつかの考えを持っていて、簡単にバブルソートを修正することによって、最適化されたバブルソートを整理して、私はそれを全体的にバブルと呼んでいます.
全体的なバブルのプロセスは、バブルのソートに基づいて、データヘッダがデータを比較するときに、比較データより大きい場合はデータをソートし、最終的にデータ全体がソートされるまで全体的に1つ後ろに移動します.全体的な発泡は,発泡ソートよりも速度的に3倍程度速かった.
私はプロジェクトでソートアルゴリズムに接触し、プロジェクトのアルゴリズムを最適化する計画を立てたとき、成熟したアルゴリズムについて理解しました.アルゴリズムの優劣は,その遍歴過程が何回経過したかを見ることであり,nがキューの長さであれば,バブルソートはnのn次方次を遍歴し,すでに最も長いアルゴリズムである.その後、私自身はソートのいくつかの考えを持っていて、簡単にバブルソートを修正することによって、最適化されたバブルソートを整理して、私はそれを全体的にバブルと呼んでいます.
public void bubbleSort(int[] data) {
for (int i = data.length - 1, j, jIndex; i > 0; i -= jIndex) {
for (jIndex = 0, j = 0; j < i; j++) {
sendMsg(data.clone(), j + 1, j - jIndex, j);
if (data[j + 1] < data[j - jIndex]) {
swapHeader(data, j + 1, j - jIndex);
} else {
swapList(data, j + 1, jIndex);
jIndex++;
}
}
}
sendMsg(data.clone());
}
public void swapList(int[] data, int i, int jIndex) {
for (int j = 0; j < jIndex; j++, i--) {
sendMsg(data.clone(), i, i - 1);
if (data[i] < data[i - 1]) {
swap(data, i, i - 1);
} else {
return;
}
}
}
public void swapHeader(int[] data, int max, int min) {
int temp = data[max];
for (; max > min; max--) {
data[max] = data[max - 1];
}
data[min] = temp;
}
全体的なバブルのプロセスは、バブルのソートに基づいて、データヘッダがデータを比較するときに、比較データより大きい場合はデータをソートし、最終的にデータ全体がソートされるまで全体的に1つ後ろに移動します.全体的な発泡は,発泡ソートよりも速度的に3倍程度速かった.