C. 빠 른 배열 알고리즘 실현
제 가 사용 한 제자리 정렬 은 코드 가 짧 고 논리 가 간단 하 며 주석 도 많이 추 가 했 습 니 다.(코드 나 주석 에 문제 가 있 는 것 을 발견 하면 알려 주세요) 코드 가 이렇게 길 어서 놀 라 지 마 세 요. 사실 그 중 2 / 3 은 주석 입 니 다.
#include "stdio.h"
/*
*
* begin end 。
* , 13, 17, 12 :
* show(array, 3, 0, 2);
* show(array, 3, 1, 2);
* show(array, 3, 1, 1);
* :
* 13 17 12
* 17 12
* 17
*/
void show(int array[], long maxlen, int begin, int end)
{
int i = 0;
/* */
for(i=0; i<begin; i++)
printf(" ");
for(i=begin; i<=end; i++)
printf("%4d", array[i]);
printf("
");
}
/*
* 。
* 1 。
* 0 。
* 。
*/
int swap(int *i, int *j)
{
int temp;
if(*i == *j)
return 0;
temp = *i;
*i = *j;
*j = temp;
return 1;
}
/*
*
* begin ( begin ) end( end)
*/
void quicksort(int array[], int maxlen, int begin, int end)
{
int i, j;
if(begin < end) {
/* , begin+1 */
i = begin + 1;
j = end;
/*
* :array[begin] array[begin+1] array[end]
* ,
*
* while(i != j) , i<=j i j
* 1 i>j
*/
while(i < j) {
/* array[begin], j , j */
if(array[i] > array[begin]) {
if(swap(&array[i], &array[j]) == 1)
show(array, maxlen, begin, end); /* begin end */
j--;
}
/* i , 。*/
else
i++;
}
/*
* : i=j, array
* array[begin+1] ~ array[i-1] array[begin]
* array[i+1] ~ array[end] array[begin]
*
* : array[begin] array
* array ,
* array[begin] 。
*
* array array[begin], array[begin] i
* array[begin] i
*/
if (array > array[begin])
i--;
/* array[begin] i */
if(swap(&array[begin], &array[i]) == 1)
/* begin end */
show(array, maxlen, begin, end);
/* i */
quicksort(array, maxlen, begin, i);
quicksort(array, maxlen, j, end);
}
}
int main(int argc, char* argv[])
{
int array[10] = {49, 38, 65, 97, 48, 13, 27, 11, 56, 45};
int maxlen = sizeof(array) / sizeof(int);
show(array, maxlen, 0, maxlen-1); /* */
quicksort(array, maxlen, 0, maxlen-1);
show(array, maxlen, 0, maxlen-1); /* */
getchar();
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.