c 언어 중의 몇 가지 정렬 알고리즘 - 거품 정렬, 빠 른 정렬, 정렬 삽입, 정렬 선택

4212 단어
정렬 알고리즘 은 우리 가 자주 사용 하 는 것 이자 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 그리고 몇 가지 정렬 알고리즘 의 차이 점 을 자세히 생각해 보 세 요. 생활 을 사랑 하고 자신 을 사랑 합 니 다.

좋은 웹페이지 즐겨찾기