컴퓨터프로그래밍

프로그래밍 기술을 정렬 : "거품"분류

버블 정렬은 또한, 조직하는 가장 느린 방법의 목록을 닫고, 가장 빠른 방법으로 간주되지 않습니다. 그러나, 그것의 이점이있다. 따라서, 거품을 정렬하는 방법 - 특정 순서로 항목을 정렬하려면 그 어느 가장이 문제에 대한 자연스럽고 논리적 인 솔루션이다. 평범한 사람은 수동으로, 예를 들어, 그들을 사용합니다 - 단지 직관에 의해.

어디서 그런 이상한 이름을 했습니까?

메소드 이름은 물에 공기 방울의 비유를 사용하여 내놓았다. 그것은 은유이다. 마찬가지로 작은 기포는 위쪽으로 상승 - 그들의 밀도 (이 경우 - 물) 유체보다 크기 때문에, 각각의 배열 요소 작은 것이 값리스트 번호의 선두에 더 점진적인 방식이다.

알고리즘에 대한 설명

다음 거품 정렬이 수행된다 :

  • 첫 번째 통과 : 배열 번호의 요소는 두 쌍의 촬영도 비교된다. 두 사람이 팀의 첫 번째 값의 일부 요소가 두 번째보다 큰 경우, 프로그램은 그들에게 교환 장소를 만든다;
  • 그 결과, 가장 많은 수의 미스 배열의 끝. 다른 모든 요소들이 있었다 같은 혼란스러운 방식으로 유지 및 정렬 이상을 필요로하지만,
  • 따라서 두 번째 패스를 필요 :이 유추하여 이루어진다 이전 (이미 설명 됨)과 비교할 수 못한 - 마이너스 하나;
  • 통로 3 개 번 비교, 제보다, 하나 초 미만, 두에서. 등등;
  • 각각의 통로가 갖는 (어레이의 모든 값, 특정 번호)를 뺀 값 (통로의 수)의 비교를 요약한다.

프로그램의 심지어 짧은 알고리즘과 같이 쓸 수있다 :

  • 임의의 두 숫자가 발견 될 때 숫자의 배열 그 두번째는 처음보다 더 크도록 결합 된, 길이로 선택되고;
  • 잘못 어레이 소프트웨어 스왑 서로 다른 요소들에 대하여 위치.

의사 한 알고리즘에 기초

다음과 같이 간단한 구현이 수행된다 :

Sortirovka_Puzirkom 절차;

처음

konechii_index하는 nachalnii_index에서 J 싸이클;

nachalnii_index에서의 I주기 konechii_index-1 단계;

만약 매시브 [I]> 매시브 [I + 1] (a 초 이상 제 소자) 다음 :

(변경 값 개소);

물론,이 단순성은 상황을 악화 : 알고리즘 간단한, 더는 모든 결함을 명시한다. 시간의 투자 비율 (: 프로그래머 매 초 또는 밀리 초 수를 평신도를위한 시간의 양이 작은 것처럼 보일 수 있지만, 사실은 상대성에 온다 여기)도 작은 배열이 너무 중대하다.

그것은 더 나은 구현했다. 예를 들어, 계정에 배열 위치의 가치의 교환을 복용 :

Sortirovka_Puzirkom 절차;

처음

sortirovka = TRUE;

주기 sortirovka 사실 = 때까지;

sortirovka = 거짓;

nachalnii_index에서의 I주기 konechii_index-1 단계;

만약 매시브 [I]> 매시브 [I + 1] (a 초 이상 제 소자) 다음 :

(요소에 대한 변경);

sortirovka = TRUE; (교환 완료 메시지를 확인).

끝.

제한

가장 큰 단점 - 프로세스의 기간입니다. 얼마나 많은 시간은 수행되는 알고리즘 정렬 거품?

리드 타임이 배열 정사각 수의 수로부터 계산된다 - 그 최종 결과에 비례한다.

배열이 여러 번 전달되는 최악의 경우 경우는 하나 개의 값 마이너스 요소가있다. 결국 비교 아무 상관이없는, 오직 하나 개의 요소가 있기 때문에이 문제가 발생하고, 배열을 마지막 패스 쓸모없는 행동이된다.

또한,이 단지 작은 크기의 어레이에 대해, 호출되면, 단순한 교류 정렬 효과적인 방법. 프로세스의 도움으로 많은 양의 데이터가 작동하지 않습니다 : 결과 오류 또는 프로그램의 실패가 될 것입니다.

존엄

버블 정렬은 이해하기가 매우 쉽습니다. 그 배열의 순서 요소의 연구에서 기술 대학의 교육 과정은 처음에 전달합니다. 방법은 델파이 프로그래밍 언어 (L (델파이) 및 C / C ++ (C / C 플러스 플러스), 올바른 순서와의 위치 알고리즘의 매우 간단한 값을 모두 구현하기 쉽다 파스칼 (파스칼). 버블 정렬은 초보자를위한 이상적입니다.

때문에 알고리즘의 단점에 과외 목적에 사용되지 않습니다.

비주얼 분류 원칙

어레이 8 22 4 74 44 37 1 7의 초기 전망

단계 1 4 8 22 74 44 37 1 7

8 22 4 74 44 1 37 7

8 22 4 74 1 44 37 7

8 22 4 1 74 44 37 7

8 22 1 4 74 44 37 7

1 22 8 4 74 44 37 7

1 8 4 22 74 44 37 7

단계 1 2 4 8 22 74 44 7 37

1 8 22 74 7 4 44 37

1 8 22 4 7 74 44 37

1 8 22 4 7 74 44 37

1 8 4 22 7 74 44 37

1 4 7 8 22 74 44 37

단계 3 1 4 7 8 22 74 37 44

1 4 7 8 22 37 74 44

1 4 7 8 22 37 74 44

1 4 7 8 22 37 74 44

1 4 7 8 22 37 74 44

단계 4 1 4 7 8 22 37 44 74

1 4 7 8 22 37 44 74

1 4 7 8 22 37 44 74

1 4 7 8 22 37 44 74

단계 5 1 4 7 8 22 37 44 74

1 4 7 8 22 37 44 74

1 4 7 8 22 37 44 74

단계 6 1 4 7 8 22 37 44 74

1 4 7 8 22 37 44 74

단계 7 1 4 7 8 22 37 44 74

파스칼의 거품 정렬 예

예 :

CONST kol_mas = 10;

VAR의 매시브 : 배열 [1..kol_mas]의 정수;

A, B, K : 정수;

시작

경우 Writeln ( '입력'kol_mas, '배열 요소');

A에 대한 : kol_mas에 readln = 1을 (매시브 [A ]);

A에 대한 : = 1 kol_mas-1을 시작 할

B의 : kol_mas에 + 1이 시작합니까 =

매시브는 [A]> 매시브 [경우 B] 다음 시작

K = 매시브의 [A]; 매시브 [A] = 매시브의 [ B] 매시브 [B] = K;

끝;

끝;

끝;

경우 Writeln ( '일종의 후');

A에 대한 : kol_mas = 1로 할 경우 Writeln (매시브 [A ]);

끝.

C 언어의 분류 예 기포 (C)

예 :

#INCLUDE

#INCLUDE

INT의 main (int argc, 문자 * 는 argv [])

{

INT 매시브 [8] = {36, 697, 73, 82, 68, 12, 183, 88}, I, FF;

{(;;) 미국

FF = 0;

대 (I = 7; 나는> 0; I -) {

경우 (매시브의 [I] <매시브 [I- 1]) {

스왑 (매시브 [I] 매시브 [I- 1]);

FF ++;

}

}

(FF == 0)이 파괴되는 경우;

}

getch (); // 디스플레이 지연

0을 반환;

}.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 ko.birmiss.com. Theme powered by WordPress.