기본 알고리즘 - 빠 른 정렬 (C 언어 버 전)
#include
#include
#define N 100000
void quick_sort(int q[], int l, int r);
int main(void)
{
int n, q[N], i;
scanf("%d", &n);
for(i=0; i<n; i++) scanf("%d", &q[i]);
quick_sort(q, 0, n-1);
for(i=0; i<n; i++) printf("%d ", q[i]);
return 0;
}
void quick_sort(int q[], int l, int r)
{
if(l>=r) return; // :
int k=q[(l+r)/2], i=l-1, j=r+1; // k, do-while , “ ”
while(i<j) // :
{
do i++; while(q[i]<k); // i k
do j--; while(q[j]>k); // j k
if(i<j) swap(q[i], q[j]);
}
quick_sort(q, l, j); // k
quick_sort(q, j+1, r); // k
}
다시 한 번 강조: k = i + j > > 1 이런 오 법 은 흔 하 다!!!
예 2: k 번 째 수 는 n 의 정수 수열 과 하나의 정수 k 를 정 합 니 다. 빠 른 선택 알고리즘 으로 수열 의 k 번 째 작은 수가 얼마 인지 구 하 십시오.
입력 형식 첫 줄 은 두 개의 정수 n 과 k 를 포함 합 니 다. 두 번 째 줄 은 n 개의 정수 (모든 정 수 는 1 ~ 109 범위 내) 를 포함 하여 정수 수열 을 표시 합 니 다. 출력 형식 은 하나의 정 수 를 출력 하여 수열 의 k 소 수 를 표시 합 니 다. 데이터 범위 1 ≤ n ≤ 100000 1 ≤ k ≤ n
입력 샘플: 5, 3, 2, 4, 1, 5, 3
출력 사례: 3 일반 해법: 모든 정렬, k 번 째 수 를 찾 습 니 다. 시간 복잡 도: O (nlogn)
#include
#define N 100000
void quick_sort(int q[], int l, int r);
void swap(int *a, int *b);
int main(void)
{
int q[N], i, n, k;
scanf("%d %d", &n, &k);
for(i=0; i<n; i++) scanf("%d", &q[i]);
quick_sort(q, 0, n-1);
printf("%d", q[k-1]);
return 0;
}
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void quick_sort(int q[], int l, int r)
{
if(l>=r) return;
int k=q[(l+r)/2], i=l-1, j=r+1;
while(i<j)
{
do i++; while(q[i]<k);
do j--; while(q[j]>k);
if(i<j) swap(&q[i], &q[j]);
}
quick_sort(q, l, j);
quick_sort(q, j+1, r);
}
빠 른 정렬 쓰기 수정: 분계 점 오른쪽 수 에 따라 분계 점 왼쪽 수의 성질 보다 적 고 불필요 한 구간 시간 복잡 도 를 계속 버 립 니 다: O (n)
#include
#define N 100000
using namespace std;
int q[N];
int llen; //
int quick_search(int l, int r, int k)
{
if (l >= r) return q[r]; // k
int t = q[l], i = l - 1, j = r + 1;
while(i<j)
{
do i++; while(q[i] < t);
do j--; while(q[j] > t);
if(i<j) swap(q[i], q[j]);
}
llen = j - l + 1;
if(k <= llen) quick_search(l, j, k); //k , ,
else quick_search(j+1, r, k - llen); //k , ,
}
int main()
{
int i, n, k;
scanf("%d %d", &n, &k);
for(i = 0; i<n; i++) scanf("%d", &q[i]);
printf("%d", quick_search(0, n-1, k));
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
조세 프 링 문제 (구조 체 지침 실현)#include<stdio.h> #include<stdlib.h> struct node{ int data; struct node *next; }; int main(){ int i,j,k,m,n; struct node...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.