実装するのが最も簡単なソートアルゴリズムは何ですか?


ベストアンサー

バブルソート

バブルソートは、隣接する要素の順序が間違っている場合に繰り返しスワップすることで機能する最も単純なソートアルゴリズムです。

例: ファーストパス: 5 1 4 2 8)–>( 1 5 4 2 8)、ここで、アルゴリズムは最初の2つの要素を比較し、5> 1以降にスワップします。(1 5 4 2 8)–>(1 4 5 2 8)、5からスワップ> 4(1 4 5 2 8)–>(1 4 2 5 8)、5> 2から交換(1 4 2 5 8 )–>(1 4 2 5 8 )、これらの要素はすでに順番になっているため(8> 5)、アルゴリズムはそれらを交換しません。

2番目のパス: 1 4 2 5 8)–>( 1 4 2 5 8)(1 4 2 5 8)–>(1 2 4 5 8)、4> 2(1 2 4 5 8)–>(1 2 4 5 8)(1 2 4 5 8 )–>(1 2 4 5 8 )これで、配列はすでに並べ替えられています。 b ut私たちのアルゴリズムはそれが完了したかどうかを知りません。アルゴリズムは、ソートされていることを確認するために、スワップなしで1回の全体パスを必要とします。

3番目のパス: 1 2 4 5 8)–>( 1 2 4 5 8)(1 2 4 5 8)–>(1 2 4 5 8)(1 2 4 5 8)–>(1 2 4 5 8)(1 2 4 5 8 )–>(1 2 4 5 8

// C program for implementation of Bubble sort

#include

void *xp, int *yp)

{

int temp = *xp;

*xp = *yp;

*yp = temp;

}

// A function to implement bubble sort

void bubbleSort(int arr[], int n)

{

int i, j;

for (i = 0; i < n-1; i++)

// Last i elements are already in place

for (j = 0; j < n-i-1; j++)

if (arr[j] > arr[j+1])

swap(&arr[j], &arr[j+1]);

}

/* Function to print an array */

void printArray(int arr[], int size)

{

int i;

for (i=0; i < size; i++)

printf("\%d ", arr[i]);

printf("n");

}

// Driver program to test above functions

int main()

{

int arr[] = {66, 4, 25, 1, 22, 81, 90};

int n = sizeof(arr)/sizeof(arr[0]);

bubbleSort(arr, n);

printf("Sorted array: \n");

printArray(arr, n);

return 0;

}

ありがとうございます。

回答

私にとって最も簡単な並べ替えアルゴリズムは、非常に基本的で理解しやすい選択並べ替えです。選択ソートアルゴリズムを実行すると、すべての値が最初の要素と比較されます。見つかった値が最初の要素よりも低い場合は、最も低い値の要素が変更され、このように続行されます。

例を挙げましょう。

配列=> [15,3,22,1,4,14]

min = 15

  1. 15と比較、min = 15
  2. 3と比較min = 3
  3. 22と比較min = 3
  4. 1、min = 1と比較
  5. 4、min = 1と比較
  6. 14と比較、min = 1

これで、min(first\_index)要素が見つかりました。最初の要素とmin要素の場所を置き換えてから、最後の要素に到達するまで続行する必要があります。

Cコードの例:

#include

void printArray(int arr[], int n) {

//use this function to print array

for (int i = 0; i < n; i++)

printf("\%d, ", arr[i]);

}

void sortArray(int arr[], int n) {

int min\_index = 0;

int temp = 0;

for (int i = 0; i < n; i++) {

min\_index = i;

for (int j = i; j < n; j++) {

//compare min index"s element with new j"s element

//if you want descending sort you can change the binary

//operator > to < .

if (arr[min\_index] > arr[j]) min\_index = j;

}

//change min index"s element and i. element

temp = arr[min\_index];

arr[min\_index] = arr[i];

arr[i] = temp;

}

printArray(arr,n);

}

int arr[] = { 100,5,11,1,22,31,4,2,3 }; //initialize array

printArray(arr,9); //print unsorted array

sortArray(arr,9); //sort array then print it

return 0;

}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です