빠 른 정렬 의 세 가지 실현 과 응용 장면
11706 단어 데이터 구조
/*
way 1:Horno
:
1、 key( ), , begin( ) end( )
2、begin key ( ),end ( ),
, array[begin] array[end], 。
3、 begin end , array[begin] array[end] 。*/
int partion1(int *array,int left,int right)
{
int key = array[right];
int begin = left;
int end = right;
while (beginwhile (beginarray[begin] <= key)//
begin++;
while (beginarray[end] >= key)
end--;
if (begin < end)
std::swap(array[begin], array[end]);
}
if (begin!=right)// , , ,
std::swap(array[begin], array[right]);
return begin;
}
/*
way2:
:
1、 begin end , key ,array[end]
2、begin , key , , array[begin] array[end], end , begin
3、end , key , , array[end] array[begin], begin , end
4、 , begin end , , key 。
*/
int partion2(int *array, int left, int right)
{
int key = array[right];
int begin = left;
int end = right;
while (beginwhile (beginarray[begin] <= key)//
begin++;
if (begin < end)
{
array[end] = array[begin];
end--;
}
while (beginarray[end] >= key)//
end--;
if (beginarray[begin] = array[end];
begin++;
}
}
if (begin != right)// , , ,
std::swap(array[begin], array[end]);
array[begin] = key;
return begin;
}
/*
way3:
:
1、 key, pPre pPcur(pPre pPcur ),pPre pPcur ,
pPcur key , pPcur ( pPre ), pPcur pPre
,pPcur , array[pPcur] array[pPre+1], ,pPre ,pPcur 。
2、 pCur , pPre+1 key 。
*/
int partion3(int *array, int left, int right)
{
int pPcur = left;
int pPre = left-1;
int key = array[right];
while (pPcurif (array[pPcur ]< key)
{
swap(array[pPre + 1], array[pPcur]);
pPre++;
}
pPcur++;
}
swap(array[right], array[++pPre]);
return pPre;
}
void QuickSort(int *array,int left,int right )
{
if (left < right)
{
int goal = partion2(array, left, right);
QuickSort(array, left, goal-1);
QuickSort(array, goal+1, right);
}
}
3、 :
// :
// , , ,( , )
// , :
int ThreeToMid(int a, int b, int c)//1 3 5
{
if (a>b)
{
if (b > c)
return b;
else
{
if (a < c)
return a;
else
return c;
}
}
else
{
if (b < c)
return b;
else
{
if (a>c)
return a;
else
return c;
}
}
}
4、 :
(1) ( ) , ( ), , , 。
(2) ( ) ( ) , 。
(3) n/2, 。
, O(N*logN), O(N^2), O(N*logN)。 O(1), , 。
, , , 。
5、 :
------------ k ------------
arr :4,0,1,0,2,3, 1, k 。
:
STL , k-1 k , O(n*logn)。 , k , “ ”。 。
:
: m ( , m = arr[0]), , :(1)m (2)m (3)m 。 m m,m m, k , :
a、 m k, k m , m k ;
b、 m k, k m , m k-s , s m 。
:
#include
#define MAX_SIZE 100
int Biger[MAX_SIZE];
int Smaller[MAX_SIZE];
int Select_kth_Small(int arr[],int n,int k)
{
if(n == 1)
return arr[0];
int b = 0,s = 0,t = arr[0],temp_n,temp_k;
int temp[MAX_SIZE];
for(int i = 1 ; i < n ; i++)//
{
if(arr[i] > t)
Biger[b++] = arr[i]; // t , Biger[]
else
Smaller[s++] = arr[i];// Smaller, set[0]
}
if(b == 0)
{
Biger[b++] = t;//if...else t
}
else
{
Smaller[s++] = t;
}
// Smaller K, K
// Biger , Biger k-r
//
if(s >= k)
{
temp_n = s;
temp_k = k;
for(i=0;ielse
{
temp_n = b;
temp_k = k-s;
for(i=0;ireturn Select_kth_Small(temp,temp_n,temp_k);
}
int main()
{
int arr[]={4,0,1,0,2,3};
int ans = Select_kth_Small(arr,6,3);
cout<<" arr[]={4,0,1,0,2,3} , 3 :"<return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.