selection sort c with examples
예제와 함께 C ++에서 선택 정렬을 자세히 살펴보십시오.
이름 자체에서 알 수 있듯이 선택 정렬 기술은 먼저 배열에서 가장 작은 요소를 선택하고 배열의 첫 번째 요소로 교체합니다.
다음으로 배열에서 두 번째로 작은 요소를 두 번째 요소로 교체합니다. 따라서 모든 패스에 대해 배열에서 가장 작은 요소가 선택되고 전체 배열이 정렬 될 때까지 적절한 위치에 배치됩니다.
=> 여기에서 완벽한 C ++ 교육 가이드를 확인하십시오.
학습 내용 :
소개
선택 정렬은 모든 패스에서 가장 작은 요소를 찾아 올바른 위치에 배치하는 것만 포함하므로 매우 간단한 정렬 기술입니다.
선택 정렬은 정렬 할 목록의 크기가 작을 때 효율적으로 작동하지만 정렬 할 목록의 크기가 커짐에 따라 성능에 나쁜 영향을 미칩니다.
따라서 더 큰 데이터 목록에는 선택 정렬이 권장되지 않는다고 말할 수 있습니다.
일반 알고리즘
선택 정렬을위한 일반 알고리즘은 다음과 같습니다.
.air 파일을 여는 방법
선택 정렬 (A, N)
1 단계 : K = 1 ~ N-1에 대해 2 단계와 3 단계를 반복합니다.
2 단계 : 가장 작은 루틴 호출 (A, K, N, POS)
3 단계 : A (K)를 A (POS)로 바꿉니다.
(루프 끝)
4 단계 : 종료
가장 작은 루틴 (A, K, N, POS)
- 1 단계 : (초기화) set smallestElem = A (K)
- 2 단계 : (초기화) POS = K 설정
- 3 단계 : J = K + 1 ~ N -1 인 경우 반복
가장 작은 경우 Elem> A (J)
최소로 설정 Elem = A (J)
POS = J 설정
(종료 된 경우)
(루프 끝) - 4 단계 : 반품 POS
선택 정렬을위한 의사 코드
Procedure selection_sort(array,N) array – array of items to be sorted N – size of array begin for I = 1 to N-1 begin set min = i for j = i+1 to N begin if array(j) 이 선택 정렬 알고리즘을 설명하는 예가 아래에 나와 있습니다.
삽화




이 그림의 표 형식은 다음과 같습니다.
정렬되지 않은 목록 최소 요소 정렬 된 목록 {18,10,7,20,2} 두 {} {18,10,7,20} 7 {두} {18,10,20} 10 {2.7} {18.20} 18 {2,7,10) {이십} 스물 {2,7,10,18} {} {2,7,10,18,20}
그림에서 모든 패스에서 다음으로 가장 작은 요소가 정렬 된 배열의 올바른 위치에 배치되는 것을 볼 수 있습니다. 위의 그림에서 5 개 요소의 배열을 정렬하려면 4 개의 패스가 필요하다는 것을 알 수 있습니다. 이는 일반적으로 N 개의 요소 배열을 정렬하려면 총 N-1 개의 패스가 필요함을 의미합니다.
다음은 C ++에서 선택 정렬 알고리즘의 구현입니다.
C ++ 예
#include using namespace std; int findSmallest (int(),int); int main () { int myarray(10) = {11,5,2,20,42,53,23,34,101,22}; int pos,temp,pass=0; cout<<'
Input list of elements to be Sorted
'; for(int i=0;i<10;i++) { cout< 산출:
정렬 할 요소 목록 입력
11 5 2 20 42 53 23 34101 22
정렬 된 요소 목록은
2 5 11 20 22 23 34 42 53101
어레이 정렬에 필요한 패스 수 : 10
위의 프로그램에서 볼 수 있듯이 배열의 첫 번째 요소를 배열의 다른 모든 요소와 비교하여 선택 정렬을 시작합니다. 이 비교가 끝나면 배열에서 가장 작은 요소가 첫 번째 위치에 배치됩니다.
다음 단계에서는 동일한 접근 방식을 사용하여 배열에서 다음으로 가장 작은 요소가 올바른 위치에 배치됩니다. 이것은 N 요소까지 또는 전체 배열이 정렬 될 때까지 계속됩니다.
자바 예
다음으로 Java 언어로 선택 정렬 기술을 구현합니다.
class Main { public static void main(String() args) { int() a = {11,5,2,20,42,53,23,34,101,22}; int pos,temp; System.out.println('
Input list to be sorted...
'); for(int i=0;i<10;i++) { System.out.print(a(i) + ' '); } for(int i=0;i<10;i++) { pos = findSmallest(a,i); temp = a(i); a(i)=a(pos); a(pos) = temp; } System.out.println('
printing sorted elements...
'); for(int i=0;i<10;i++) { System.out.print(a(i) + ' '); } } public static int findSmallest(int a(),int i) { int smallest,position,j; smallest = a(i); position = i; for(j=i+1;j<10;j++) { if(a(j) 산출:
정렬 할 입력 목록…
11 5 2 20 42 53 23 34101 22
정렬 된 요소 인쇄 중…
2 5 11 20 22 23 34 42 53101
위의 Java 예제에서도 동일한 논리를 적용합니다. 배열에서 가장 작은 요소를 반복해서 찾아 전체 배열이 완전히 정렬 될 때까지 정렬 된 배열에 넣습니다.
따라서 선택 정렬은 배열에서 다음으로 가장 작은 요소를 반복해서 찾아 적절한 위치에있는 요소와 교체해야하므로 구현하기 가장 간단한 알고리즘입니다.
선택 정렬의 복잡성 분석
선택 정렬에 대한 위의 의사 코드에서 볼 수 있듯이 선택 정렬을 완료하려면 서로 중첩 된 두 개의 for 루프가 필요하다는 것을 알고 있습니다. 하나의 for 루프는 배열의 모든 요소를 통과하고 외부 for 루프 내부에 중첩 된 다른 for 루프를 사용하여 최소 요소 인덱스를 찾습니다.
따라서 입력 배열의 크기 N이 주어지면 선택 정렬 알고리즘은 다음과 같은 시간 및 복잡도 값을 갖습니다.
최악의 시간 복잡성 O (n2); O (n) 스왑 최상의 경우 시간 복잡성 O (n2); O (n) 스왑 평균 시간 복잡성 O (n2); O (n) 스왑 공간 복잡성 O (1)
O (의 시간 복잡성 엔 두)는 주로 두 개의 for 루프를 사용하기 때문입니다. 선택 정렬 기술은 O (n) 스왑 이상을 사용하지 않으며 메모리 쓰기 작업이 비용이 많이 드는 것으로 판명 될 때 유용합니다.
결론
선택 정렬은 쉽게 구현할 수있는 또 다른 가장 간단한 정렬 기술입니다. 선택 정렬은 정렬 할 값의 범위를 알고있을 때 가장 잘 작동합니다. 따라서 선택 정렬을 사용하는 데이터 구조의 정렬에 관한 한, 우리는 선형이고 유한 한 크기의 데이터 구조 만 정렬 할 수 있습니다.
이것은 선택 정렬을 사용하여 배열과 같은 데이터 구조를 효율적으로 정렬 할 수 있음을 의미합니다.
이 튜토리얼에서는 C ++ 및 Java 언어를 사용한 선택 정렬 구현을 포함하여 선택 정렬에 대해 자세히 설명했습니다. 선택 정렬의 논리는 목록에서 가장 작은 요소를 반복적으로 찾아 적절한 위치에 배치하는 것입니다.
다음 튜토리얼에서는 지금까지 논의한 다른 두 기술, 즉 버블 정렬과 선택 정렬보다 더 효율적인 기술이라고하는 삽입 정렬에 대해 자세히 알아 봅니다.
=> 여기에서 C ++ 교육 자습서의 A-Z를 보려면 여기를 확인하십시오.
추천 도서