I.はじめに
現在、私たちがよく知っているソートは、バブルソート、選択ソート、挿入ソート、ヒルソート、マージソート、クイックソート、バケットソート、トポロジカルソートなどの種類で人気があります
。1つずつ背が高いようです。 、そして一部の人々はユニークかもしれません。後者の種類は少し混乱します。つまり、具体的な実装原理が何であるかわかりません。知識を脳に実装するために、グループで学習します。
それでは、今回は通常のソートの最初のタイプであるバブルソートを学びましょう。
次回は次のソートを1つずつ記録します。
もう意味がないので、始めましょう。
2、バブルソート
誰もがバブルソートに精通していると思います。まだわからない場合は、この記事に従ってゆっくりと学んでください。忍耐力は常に成功します。一度理解したら、何度か読んでいただければ理解できます!
実装の原則: トラバースされた要素がその背後にあるすべての要素と比較されるたびに、比較ルールを満たしている場合、要素の位置はすべての要素のトラバースが終了するまで交換されます。目的は、最小のものに言及することです。毎回トラバースされる要素前
にソートされる配列:4 3 5 1 0 2ソートが完了した後
:0 1 2 3 4 5
注:必要に応じて、多くの並べ替え結果があります。例として、配列を小さいものから大きいものに並べ替えています。配列は添え字0から始まります。
フローチャート
の要素の最初の選択を見てみましょう:(位置インデックス:0、値:4)
②「インデックス0」以降のすべての要素のトラバースを開始し、この時点で要素3にトラバースし、インデックス0の4と比較します。
比較の結果、インデックス0で3が4より小さく、位置がスワップされ、配列の変更は次のようになります
。②インデックス0の後の要素をトラバースし続け、この時点で要素5にトラバースし、インデックス0で3と比較します。
比較の結果、インデックス0で5が3より大きいことがわかりました。このとき、要素の位置は交換されないため、要素の位置は次のようになります
。③インデックス0以降の要素をトラバースし続けます。このとき、トラバースします。インデックス0の要素1と3に。比較します。
比較すると、インデックス0で1が3よりも小さいことがわかります。位置を交換します。このとき、要素の位置は次のとおりです
。④インデックス0の後の要素をトラバースし続けます。このとき、要素0までトラバースし、1と比較します。インデックス0で。
比較すると、インデックス0で0が1よりも小さいことがわかります。位置を交換します。このとき、要素の位置は次のとおりです
。⑤インデックス0の後の要素をトラバースし続けます。このとき、要素2にトラバースし、で0と比較します。インデックス0。
比較の結果、インデックス0で2が0より大きいことがわかりました。この時点では、位置はスワップされていないため、要素の位置は次のようになります。
したがって、ループの最初のラウンドがここでトラバースされました。最初の位置が見つかりました。配列の(つまり、インデックス0の要素)はすでに配列全体の中で最小のものです。次のループでは、インデックス1の位置をロックし、インデックス1の後ろのすべての要素をトラバースして、の2番目の要素を見つけます。アレイ全体。
ここでは、フローチャートを投稿しません(フローチャートは本当に疲れます)
それでもバブリングソートを完了する方法がわからない場合は、教科書をもっと読んでから、ゆっくりと理解して自分で描くことをお勧めします。これはすぐに習得できます。以下に、バブリングソートコードのJavaバージョンを投稿します。
import java.util.Arrays;
@SuppressWarnings("all")
public class SortClass {
// 冒泡排序
public static void bubbleSort(Comparable[] a){
int len = a.length;
for(int i=0;i<len;++i)
for(int j=i+1;j<len;++j)
if(greater(a[i],a[j]))
swap(a,i,j);
}
// 比较待排序数组里面两个元素的大小
// 如果 a>b .则返回true,否则返回false
public static boolean greater(Comparable a , Comparable b){
return a.compareTo(b)>0;
}
// 交换a数组里面索引 i 和索引 j 里面的值
public static void swap(Comparable[] a,int i,int j){
Comparable mid;
mid = a[i];
a[i] = a[j];
a[j] = mid;
}
public static void main(String[] args) {
// 测试冒泡排序
// Integer 是 int 的封装类
Integer[] a = {
2,4,1,5,8,10,0,3,6};
SortClass.bubbleSort(a);
for(int c : a){
System.out.print(c+" ");
}
System.out.println();
}
}
配列の結果は次のとおり
です。c言語でのバブルソート
// c语言版的冒泡排序,n 是数组 a 的长度
void bubble(int& a[],int n){
for(int i=0;i<n;++i)
for(int j=i+1;j<n;++j)
if(a[j]<a[i])
swap(a[i],a[j]);
}
C ++言語でのバブルソート
// c++语言版的冒泡排序,v 是动态数组
void bubble(vector<int> &v){
int n = v.size();
for(int i=0;i<n;++i)
for(int j=i+1;j<n;++j)
if(v[j]<v[i])
swap(v[i],v[j]);
}