정보 작업에서 가장 수익성이 높은저장 방법은 구조와 배열입니다. 후자는 프로그램에서 사용하기 편리한 동일한 유형의 데이터를 포함 할 수 있습니다. 그들은 종종 온라인 상점과 게임 개발에 사용됩니다. 따라서 여기에 포함 된 데이터는 반복적으로 정렬 및 교환되며 논리 또는 수학 연산이 수행됩니다. 배열에 순서를 가져 오는 방법 중 하나는 버블 정렬입니다. 이 발행물은 C 프로그램 코드와 순열 논리를 검토합니다.
프로그래머의 기술적 어려움거품 정렬은 효율성이 낮기 때문에 거의 사용되지 않지만 1 차원 배열을 나타내지 않습니다. 훈련 단계에서 가장 단순한 것으로 간주되는 경우가 더 많습니다. 그러나 가장 효과적이지 않습니다. 이 알고리즘은 조건이 충족되면 교대로 숫자 비교와 셀 상호 재 작성으로 구성됩니다.
첫 번째 반복은 점차 두 가지를 비교합니다.이웃 번호. 왼쪽이 더 크면 오른쪽이있는 곳에 덮어 씁니다. 마이너스 8과 0은 조건을 충족하지 않습니다. 따라서 그들은 장소를 바꾸지 않습니다. 0과 5도 적합하지 않습니다. 5와 3이 적합합니다. 그러나 이러한 반복에서는 5가 이전에 0과 비교되었으므로 판독 프레임이 5에 속하지 않고 오른쪽으로 이동합니다. 이것은 다음 쌍이 3과 9를 교환하고 있음을 의미합니다. 또한 독자는 작성자의 의견없이 모든 대체 항목을 직접 살펴보고 버블 정렬 알고리즘을 연구하도록 초대받습니다.
모든 반복의 결과로 배열은 점진적으로기본적으로 다음과 같이 발생합니다. 큰 양수는 빠르게 오른쪽으로 이동하고 작은 수와 음수는 천천히 왼쪽으로 이동합니다. 액체 속의 기포가 빠르게 떠오르는 것 같습니다. 이러한 비유로 인해 알고리즘을 버블 정렬이라고했습니다.
이상적인 정렬 알고리즘은최대한 빨리. 또한 소량의 프로세서 및 메모리 리소스를 제거해야합니다. 그리고 어레이의 버블 분류와 같은 프로세스는 가장 에너지 효율적이고 수익성이 높지 않을 수 있습니다. 따라서 그는 광범위한 적용을 찾지 못했습니다. 현재 메모리 문제가 적다면 프로세서 리소스에 대해 걱정해야합니다. 디지털 어레이는 클 수있을뿐만 아니라 엄청날 수 있기 때문에 컴퓨터 리소스의 소비는 예측할 수없는 것으로 판명됩니다.
거품 분류가 원칙적으로 빠르다면상대적으로 작은 배열에 물건을 정리하는 데 대처하고 큰 배열에서는 자원 과다 사용으로 인해 실패 할 수 있습니다. 이는 알고리즘에 내재 된 보편성 속성이 위반된다는 것을 의미합니다. 또한 버블 정렬은 N 제곱 복잡도를 가지며 N 복잡도의 로그와는 매우 거리가 멉니 다. 또한 대형 어레이를 처리 할 때 실패 할 위험이 있으므로 셀 덮어 쓰기로 인한 데이터 손실 가능성이 높아집니다. 이와 관련하여 삽입 정렬 또는 Shell 알고리즘이 훨씬 더 수익성이 있습니다.
그래픽 응용 프로그램에서 아래 지정C 언어 용 컴퓨터 코드는 버블 정렬을 허용합니다. void 유형의 별도 함수로 렌더링됩니다. 값을 반환하지 않지만 포인터를 사용하여 정렬 조건에 따라 항목을 교체합니다. 이 경우 코드는 정수 배열을 오름차순으로 버블 정렬하는 문제를 해결합니다.
이 기능을 수행하려면 사용자는원하는 값으로 채워야하는 배열을 만듭니다. 프로그램 시작시 치수와 요소 수를 설정하여 수동으로 수행 할 수 있습니다. 그런 다음 배열을 상수 값으로 채울 수 있습니다. 두 번째 옵션은 100 개 요소의 큰 1 차원 배열을 선언하여 범용 프로그램을 만드는 것입니다.
정수 변수를 설정하고 할당함으로써키보드에서 읽은 값에 따라 채워질 셀 수를 제한 할 수 있습니다. scanf ( "% d", & value) 함수를 사용하여 키보드에서 사용자가 배열 요소를 입력하는 기능을 구현할 수도 있습니다. 이 예에서 "% d"는 컴파일러에게 스캔 후 정수 값이 반환 될 것임을 알려주는 수정 자 문자열입니다. 변수 값은 1 차원 정수 배열의 크기 인 값을 저장합니다.
정렬 알고리즘을 사용하려면배열의 이름과 크기를 함수에 전달합니다. 그래픽 응용 프로그램에 표시된 상황에서 정렬 함수에 대한 호출은 BubleSort (dataArray, sizeDataArray)와 같습니다. 물론 함수 뒤의 줄 끝에 프로그램 구문 규칙에 따라 마침표 대신 세미콜론을 넣어야합니다. 따라서 dataArray는 정렬 할 배열의 이름이고 sizeDataArray는 크기입니다.
이러한 매개 변수를 BubleSort () 함수에 전달그림에서 볼 수 있듯이 실제 프로그램에서는 sizeArray를 사용하는 대신 sizeDataArray를 사용하여 작업이 수행된다는 사실을 알 수 있습니다. 이것은 또한 정수 dataArray가 BubleSort () 함수에서 사용된다는 것을 의미합니다. printArrayFunction () 및 ArrayIntegerInputFunction () 함수는 동일한 방식으로 호출됩니다. 첫 번째는 인쇄, 즉 콘솔에 항목을 표시하는 역할을합니다. 그리고 두 번째는 사용자가 키보드에서 입력 한 요소로 채우기 위해 필요합니다.
이러한 스타일의 프로그래밍은 격리되었을 때작업은 함수의 형태로 수행되며 코드의 가독성을 크게 높이고 개발 속도를 높입니다. 이러한 프로그램에서는 키보드에서 배열 채우기, 인쇄 및 버블 정렬 자체가 별도로 제거됩니다. 후자는 데이터를 정렬하는 데 사용하거나 배열의 최소값과 최대 값을 찾기위한 보조 함수로 사용할 수 있습니다.
삽입 정렬은각 요소를 하나씩 비교하고 조건에 따라 이미 정렬 된 요소 체인을 구축합니다. 결과적으로 각 후속 비교의 결과는 새 값을 배치 할 수있는 셀을 찾는 것입니다. 그러나 각각의 삽입은 배열의 이미 정렬 된 부분에서 수행됩니다.
이 처리는 더 빠르며 계산 복잡성이 적습니다. C 코드는 그래픽 응용 프로그램에 표시됩니다.
또한 함수로 렌더링됩니다.정렬 할 배열의 이름과 배열의 크기가 인수로 전달됩니다. 여기에서 버블 정렬이 얼마나 느린 지 확인할 수 있습니다. 삽입물은 유사한 작업을 훨씬 더 빠르게 수행하고 프로그램 코드가 간결합니다.