문제
C 언어의 다양한 정렬 기술은 무엇입니까? 예를 들어 하나의 정렬 기술을 설명하십시오.
해결책
C 언어는 다음과 같은 5가지 정렬 기술을 제공합니다. -
- 버블 정렬(또는) 교환 정렬.
- 선택 정렬.
- 삽입 정렬(또는) 선형 정렬.
- 빠른 정렬(또는) 파티션 교환 정렬
- 병합 정렬(또는) 외부 정렬
거품 정렬
교환 정렬이라고도 하는 가장 간단한 정렬 기술입니다.
절차
-
첫 번째 요소와 목록의 나머지 요소를 비교하고 순서가 맞지 않으면 교환(교체)합니다.
-
모든 요소가 정렬될 때까지 목록의 다른 요소에 대해 동일한 작업을 반복합니다.
30 50 40 10 20
아래 주어진 요소를 고려하십시오 -
첫 번째 패스
첫 번째 요소를 나머지 요소와 비교합니다.
a[0]> a[1] $\square$ $\square$30>50 (F) $\square$ $\square$교환 없음
a[0]> a[2] $\square$ $\square$ 30>40 (F) $\square$ $\square$ 교환 없음
a[0]> a[3] $\square$ $\square$ 30>10 (T) $\square$ $\square$ 교환
a[0]> a[4] $\square$ $\square$ 10>20 (F) $\square$ $\square$ 교환 없음
10 50 40 30 20
두 번째 패스
두 번째 요소를 나머지 요소와 비교합니다.
a[1]> a[2] $\square$ $\square$ 50>40 (T) $\square$ $\square$ 교환
a[1]> a[3] $\square$ $\square$ 40>30 (T) $\square$ $\square$ 교환
a[1]> a[4] $\square$ $\square$ 30>20 (T) $\square$ $\square$ 교환
10 20 50 40 30
세 번째 패스
세 번째 요소를 나머지 요소와 비교합니다.
a[2]> a[3] $\square$ $\square$ 50>40 (T) $\square$ $\square$ 교환
a[2]> a[4] $\square$ $\square$ 40>30 (T) $\square$ $\square$ 교환
10 20 30 50 40
네 번째 패스
네 번째 요소를 나머지 요소와 비교합니다.
a[3]> a[4] $\square$ $\square$ 50>40 (T) $\square$ $\square$ 교환
10 20 30 40 50
절차
아래에 주어진 버블 정렬 절차를 참조하십시오 -
for (i=0; i<n-1; i++){ for (j=i+1; j<n; j++){ if (a[i] > a[j]){ t=a[i]; a[i] = a[j]; a[j] = t; } } }
예시
다음은 버블 정렬 기술을 위한 C 프로그램입니다 -
#include<stdio.h> int main(){ int a[50], i,j,n,t; printf("enter the No: of elements in the list:\n"); scanf("%d", &n); printf("enter the elements:\n"); for(i=0; i<n; i++){ scanf ("%d", &a[i]); } printf("Before bubble sorting the elements are:\n"); for(i=0; i<n; i++) printf("%d \t\n", a[i]); for (i=0; i<n-1; i++){ for (j=i+1; j<n; j++){ if (a[i] > a[j]){ t = a[i]; a[i] = a[j]; a[j] = t; } } } printf ("after bubble sorting the elements are:\n"); for (i=0; i<n; i++) printf("%d\t", a[i]); return 0; }
출력
위의 프로그램을 실행하면 다음과 같은 결과가 나온다 -
enter the No: of elements in the list: 5 enter the elements: 12 11 45 26 67 Before bubble sorting the elements are: 12 11 45 26 67 after bubble sorting the elements are: 11 12 26 45 67