가장 쉽게 구현할 수있는 정렬 알고리즘은 무엇인가요?


우수 답변

버블 정렬

버블 정렬은 인접한 요소의 순서가 잘못된 경우 반복적으로 교체하여 작동하는 가장 간단한 정렬 알고리즘입니다.

예 : 첫 번째 패스 : ( 5 1 4 2 8) –> ( 1 5 4 2 8), 여기에서 알고리즘은 처음 두 요소를 비교하고 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) 알고리즘이 요소를 바꾸지 않습니다.

두 번째 패스 : ( 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) (12 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) (12 4 5 8 ) –> (12 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;

}

감사합니다.

답변

저에게 가장 쉬운 정렬 알고리즘은 매우 기본적이고 이해하기 쉬운 선택 정렬입니다.선택 정렬 알고리즘을 실행할 때 모든 값을 첫 번째 요소와 비교하고, 찾은 값이 첫 번째 요소보다 낮을 때 가장 낮은 값을 가진 요소를 변경하고 다음과 같이 계속합니다.

예를 들어 보겠습니다.

Array => [15,3,22,1,4,14]

min = 15.

  1. 15와 비교, 최소 = 15
  2. 3과 비교, min = 3
  3. 22와 비교, min = 3
  4. 1과 비교, 최소 = 1
  5. 4와 비교, 최소 = 1
  6. 14, min = 1과 비교

이제 min (first\_index) 요소를 찾았습니다. 첫 번째 요소와 최소 요소의 자리를 교체 한 다음 마지막 요소에 도달 할 때까지 계속 진행해야합니다.

예제 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;

}

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다