c 언어 중의 몇 가지 정렬 알고리즘 - 거품 정렬, 빠 른 정렬, 정렬 삽입, 정렬 선택
첫 번 째: 빠 른 정렬
빠 른 정렬 법 (QuickSort) 은 매우 빠 른 대비 정렬 방법 이다.
빠 른 정렬 은 거품 정렬 에 대한 개선 이다.그의 기본 사상 은 누 워 서 정렬 할 데 이 터 를 독립 된 두 부분 으로 나 누 는 것 이다. 그 중에서 일부분 의 모든 데 이 터 는 다른 일부분 의 모든 데이터 보다 작다. 그 다음 에 다음 과 같은 방법 으로 이 두 부분의 데 이 터 를 각각 신속하게 정렬 하고 전체 정렬 과정 은 재 귀적 으로 진행 하여 전체 데 이 터 를 질서 있 는 서열 로 바 꿀 수 있다.
정렬 할 배열 이 A [1] 라 고 가정 하면... A [N] 은 먼저 하나의 데이터 (보통 첫 번 째 데 이 터 를 선택 합 니 다) 를 관건 적 인 데이터 로 선택 한 다음 에 그 보다 큰 수 를 모두 앞 에 놓 고 그 보다 큰 수 를 모두 뒤에 놓 습 니 다. 이 과정 을 누 워 서 빠 른 정렬 이 라 고 합 니 다.누 워 서 빠르게 정렬 하 는 알고리즘 은:
1) 、 두 개의 변수 I, J 를 설정 하고 정렬 이 시 작 될 때 I: = 1, J: = N;
2) 첫 번 째 배열 요 소 를 관건 적 인 데이터 로 하여 X: = A [1] 에 값 을 부여 한다.
3) 、 J 부터 앞으로 검색 합 니 다. 즉, 뒤에서 앞으로 검색 합 니 다 (J: = J - 1). X 보다 작은 값 을 찾 으 면 두 가 지 를 교환 합 니 다.
4) 、 I 부터 뒤로 검색 합 니 다. 즉, 앞에서 부터 뒤로 검색 합 니 다 (I: = I + 1). X 보다 큰 값 을 찾 으 면 두 가 지 를 교환 합 니 다.
5) 、 I > j 까지 3, 4 단계 반복 하기;
코드 는 다음 과 같 습 니 다:
#include int partions(int l[],int low,int high) { int prvotkey=l[low]; l[0]=l[low]; while (low { while (low=prvotkey) --high; l[low]=l[high]; while (low ++low; l[high]=l[low]; } l[low]=l[0]; return low; } void qsort(int l[],int low,int high) { int prvotloc; if(low { prvotloc=partions(l,low,high); //첫 번 째 정렬 결 과 를 중심 으로 하 다. qsort (l, low, prvotloc - 1); / / 재 귀적 호출 정렬 은 low 에서 prvotloc - 1 로 qsort (l, prvotoloc + 1, high); / / 재 귀적 호출 순 서 는 prvotoloc + 1 에서 high}} void quicksort (int l [], int n) {qsort (l, 1, n); / / 첫 번 째 를 중심 축 으로 첫 번 째 줄 에서 두 번 째 줄 로 가 는} void main () {int a [11]] = {int a [11] = {0, 2, 32, 32, 43, 23, 45, 36, 36, 57, 57, 14, 14, 14, 27, 39}; for (int b = 1; b < 11; b + + +) printf ("% 3d", a [b]]]], printf (printf); printf (printf); printf = b = 1; b = 1; b < "); quicksort (a, 11); for (int c = 1; c < 11; c + +) printf ("% 3d ", a [c]);}
두 번 째 거품 정렬
거품 정렬 은 가장 간단 한 정렬 알고리즘 이자 우리 가 가장 먼저 접촉 하고 사용 한 것 이다.
코드 는 다음 과 같 습 니 다:
void main()
{
int i,j,temp;
int a[10];
for(i=0;i<10;i++)
scanf ("%d,",&a[i]);
for(j=0;j<=9;j++)
{ for (i=0;i<10-j;i++)
if (a[i]>a[i+1])
{ temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;}
}
for(i=1;i<11;i++)
printf("%5d,",a[i] );
printf("");
}
세 번 째 삽입 정렬
알고리즘 소개:
『 9352 』 첫 번 째 요소 부터 이 요 소 는 정렬 되 었 다 고 볼 수 있 습 니 다.
『 9353 』 다음 요 소 를 꺼 내 정렬 된 요소 시퀀스 에서 뒤에서 앞으로 스 캔 합 니 다.
『 9354 』 이 요소 (정렬 됨) 가 새 요소 보다 크 면 이 요 소 를 다음 위치 로 이동 합 니 다.
『 93555 』 정렬 된 요소 가 새 요소 보다 작 거나 같은 위 치 를 찾 을 때 까지 3 단 계 를 반복 합 니 다.
『 9356 』 새로운 요 소 를 다음 위치 에 삽입 합 니 다.
『 9357 』 반복 절차 2
코드 는 다음 과 같 습 니 다:
int main()
{
int a[10];
int i,j,temp=0;
int k,x=0;
printf(" 10 :
");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
{
k = i;
for(j=i+1;j<10;j++)
if(a[j]네 번 째 선택 정렬
알고리즘:
1. 정렬 할 데이터 요소 중에서 가장 작은 (또는 가장 큰) 요 소 를 선택 하고 정렬 할 데이터 요소 가 다 배 열 될 때 까지 순 서 를 정렬 해 야 합 니 다.2. 정렬 과정: [예시]: 초기 키워드 [49 38 65 97 76 13 27 49] 첫 번 째 정렬 후 13 [38 65 97 76 49 27 49] 두 번 째 정렬 후 13 27 [65 97 76 49 49 49] 세 번 째 정렬 후 13 27 38 [97 76 49 65 49] 네 번 째 정렬 후 13 27 38 49 [49 97 65 76] 다섯 번 째 정렬 후 13 27 38 49 49 [97 97 76] 여섯 번 째 정렬 후 13 27 38 49 49 49 49 [97 76]일곱 번 째 정렬 후 13 27 38 49 76 [97] 마지막 정렬 결과 13 27 38 49 76 97
#include
int main()
{
int a[] = {6,8,9,3,4,7,2,5,0,1};
int i, j, pick, tmp;
for(i = 0; i < 10; ++i)
{
pick = a [i]; / / 캡 처 개수
for(j = i + 1; j < 10; ++j)
{
if (pick > a [j]) / / 후속 요소 에서 그 보다 작은 수 를 선택 하여 교환 합 니 다.
{
tmp = pick;
pick = a[j];
a[j] = tmp;
}
} / / pick 은 이 순환 에서 찾 은 최소 값 을 저장 합 니 다.
a[i] = pick;
}
/ / 출력
for(i = 0; i < 10; ++i)
printf("%d ", a[i]);
return 0;
} 한 편의 문장 을 추천 합 니 다. 이것 은 제 가 말 한 것 보다 더 명확 하고 상세 합 니 다.http://wenku.baidu.com/view/7a7a27f04693daef5ef73dd1.html 그리고 몇 가지 정렬 알고리즘 의 차이 점 을 자세히 생각해 보 세 요. 생활 을 사랑 하고 자신 을 사랑 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.