버블 정렬 알고리즘의 작동은 다음과 같습니다. 두 개의 인접한 요소를 앞에서 뒤로 비교합니다. 두 번째 요소가 첫 번째 요소보다 작으면 마지막 요소와 같아질 때까지 두 요소를 교환합니다. 가장 큰 요소가 마지막에 배치되도록 비교를 (n-1) 번 반복하면 정렬이 완료됩니다.
------------------------------- ------ ------------------ ------ --------
Quicksort 알고리즘(버블 정렬의 최적화):
1) 정렬이 시작될 때 두 변수 i와 j를 설정합니다. =0, j=N-1;
2) 첫 번째 배열 요소를 키 데이터로 사용하고 이를 키에 할당합니다. 즉, key=A[0]; j부터 정방향 검색을 시작합니다. 즉, 뒤에서 정방향으로 검색(j--)하고, 키보다 작은 첫 번째 값 A[j]를 찾아 A[j]와 A[i]를 교환합니다.
4) i부터 역방향 검색, 즉 앞에서 뒤로 검색(i++)하여 키보다 큰 첫 번째 A[i]를 찾아 A[i]와 A[j]를 교환합니다.
5) i=j가 될 때까지 3단계와 4단계를 반복합니다. (3단계와 4단계에서는 조건을 충족하는 값이 발견되지 않습니다. 즉, 3의 A[j]는 키보다 작지 않고 A[i]는 4는 키보다 크지 않습니다. j=j-1, i=i+1이 되도록 j와 i의 값을 변경할 때 조건에 맞는 값을 찾을 때까지 i와 j 포인터 위치는 동안 변경되지 않고 유지됩니다. 이 프로세스는 i+ 또는 j-가 완료될 때 발생해야 하며 이 시점에서 루프가 종료됩니다.
플래그(부호)를 설정합니다(버블 정렬의 또 다른 최적화 방법). 각 비교가 완료된 후 요소가 교환되었는지 확인하십시오. 그렇다면 다음 주기를 계속하십시오. 그렇지 않으면 루프를 종료합니다.
이 "플래그 비트 설정" 방법은 "빠른 정렬 알고리즘"만큼 효율적이지 않습니다.
------------------------------- ------ ------------------ ------ --------
C 언어 코드는
때 n이 크면 시간 복잡도를 사용해야 합니다. O(nlog2n) 정도의 정렬 방법: 빠른 정렬, 힙 정렬 또는 병합 정렬./* ** bubble sort */ void bubble_sort(int *str, int size) { int i = 0, j = 0; int tmp = 0; /* ** 进行size-1趟排序; */ for (i = 0; i < size - 1; i++) { /* ** 每排序一趟,将最大的元素沉底。下一趟少比较i次; */ for (j = 0; j < size - 1 - i; j++) { if (str[j] > str[j + 1]) { tmp = str[j]; str[j] = str[j + 1]; str[j + 1] = tmp; } } } } /* ** 优化一:设置一个标志位sign的bubble sort; */ void bubble_sort(int *str, int size) { int i = 0, j = 0; int tmp = 0, sign = 0; for (i = 0; i < size - 1; i++) { /* ** 每趟排序前将sign置为0,如果相邻元素进行了交换则sign>1; ** 否则,sign==0,没有进行交换,排序完成,跳出循环; */ flag = 0; for (j = 0; j < size - 1 - i; j++) { if (str[j] > str[j + 1]) { tmp = str[j]; str[j] = str[j + 1]; str[j + 1] = tmp; sign++; } } if (0 == sign) break; } } /* ** 优化二:quick sort; */ void quicksort(int *str, int left, int right) { assert(str); /* **如果左边大于或等于右边,则该数组已经排序完成; */ if (left >= right) { return; } int i = left; int j = right; int key = str[left]; /* **当i=j时,一趟排序完成,将所有数分为一大一小两组; */ while (i < j) { /* **第一次从后向前遍历,遇到第一个比key小的交换两数位置; */ while ((i < j) && (key <= str[j])) { j--; } str[i] = str[j]; /* **第二次从前向后遍历,遇到第一个比key大的交换两数位置; */ while ((i < j) && (key >= str[i])) { i++; } str[j] = str[i]; } str[i] = key; /* **递归调用,完成左、右子序列的排序; */ quicksort(str, left, i - 1); quicksort(str, i + 1, right); }
퀵 정렬: 현재 비교 기반 정렬 중 가장 좋은 방법으로 간주됩니다. 정렬할 키워드가 무작위로 분포되어 있으면 퀵 정렬의 평균 시간이 가장 짧습니다. 🎜>
버블 정렬과 버블 정렬의 두 가지 최적화에 대한 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!
핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기
