정렬은 요소를 오름차순(또는 내림차순)으로 정렬하는 과정입니다.
정렬 유형
C 언어는 다음과 같은 5가지 정렬 기술을 제공합니다. -
- 버블 정렬(또는) 교환 정렬
- 선택 정렬
- 삽입 정렬(또는) 선형 정렬
- 빠른 정렬(또는) 파티션 교환 정렬
- 병합 정렬(또는) 외부 정렬
빠른 정렬
분할 정복 알고리즘입니다.
- 1단계 - 배열에서 요소를 선택하고 그것을 피벗 요소라고 합니다.
- 2단계 - 정렬되지 않은 배열 요소를 두 개의 배열로 나눕니다.
- 3단계 - 피벗 요소보다 작은 값이 첫 번째 하위 배열 아래에 오면 피벗보다 큰 값을 가진 나머지 요소가 두 번째 하위 배열에 옵니다.
아래 주어진 예를 고려하십시오. 여기서
- P는 피벗 요소입니다.
- L은 왼쪽 포인터입니다.
- R은 오른쪽 포인터입니다.
요소는 6, 3, 7, 2, 4, 5입니다.
지금,
- 피벗이 고정된 위치에 있습니다.
- 왼쪽 요소가 모두 적습니다.
- 오른쪽 요소가 피벗보다 큽니다.
- 이제 배열을 왼쪽 부분과 오른쪽 부분 2개의 하위 배열로 나눕니다.
- 왼쪽 파티션을 사용하여 빠른 정렬을 적용합니다.
지금,
- 피벗이 고정된 위치에 있습니다.
- 모든 왼쪽 요소가 더 적고 정렬됨
- 오른쪽 요소가 더 크고 정렬된 순서로 표시됩니다.
- 최종 정렬된 목록은 2, 3, 4, 5, 6, 7의 두 하위 배열을 결합하는 것입니다.
예시
다음은 빠른 정렬 기술을 사용하여 요소를 정렬하는 C 프로그램입니다 -
#include<stdio.h> void quicksort(int number[25],int first,int last){ int i, j, pivot, temp; if(first<last){ pivot=first; i=first; j=last; while(i<j){ while(number[i]<=number[pivot]&&i<last) i++; while(number[j]>number[pivot]) j--; if(i<j){ temp=number[i]; number[i]=number[j]; number[j]=temp; } } temp=number[pivot]; number[pivot]=number[j]; number[j]=temp; quicksort(number,first,j-1); quicksort(number,j+1,last); } } int main(){ int i, count, number[25]; printf("How many elements are u going to enter?: "); scanf("%d",&count); printf("Enter %d elements: ", count); for(i=0;i<count;i++) scanf("%d",&number[i]); quicksort(number,0,count-1); printf("Order of Sorted elements: "); for(i=0;i<count;i++) printf(" %d",number[i]); return 0; }
출력
위의 프로그램이 실행되면 다음과 같은 출력을 생성합니다 -
How many elements are u going to enter?: 10 Enter 10 elements: 2 3 5 7 1 9 3 8 0 4 Order of Sorted elements: 0 1 2 3 3 4 5 7 8 9