65,211
社区成员
发帖
与我相关
我的任务
分享void swap( int& a, int& b )
{
if ( a == b ) return;
a ^= b;
b ^= a;
a ^= b;
}
int partation( int* arr, int low, int high )
{
int ans = low - 1;
for ( int i = low; i < high; ++i )
{
if ( arr[i] < arr[high] )
{
swap( arr[i], arr[++ans] );
}
}
swap( arr[++ans], arr[high] );
return ans;
}
int nth( int* arr, int low, int high, int index )
{
while( low < high )
{
int mid = partation(arr, low, high);
if ( mid == index ) return arr[mid];
if ( mid < index ) return nth( arr, mid+1, high, index );
if ( mid > index ) return nth( arr, low, mid-1, index );
}
}
#include <iostream>
#include <iterator>
#include <algorithm>
#include <ctime>
using namespace std;
int main()
{
const int size = 99;
int arr[size];
for ( int index = 0; index < size; ++index )
arr[index] = index;
srand( time(0) );
random_shuffle( arr, arr+size );
copy( arr, arr+size, ostream_iterator<int>( cout, " " ) );
cout << endl;
cout << "the 73th element is " << nth( arr, 0, size-1, 73 ) << endl;
copy( arr, arr+size, ostream_iterator<int>( cout, " " ) );
cout << endl;
return 0;
}
int nth( int* arr, int low, int high, int index )
{
if(mid==index)return arr[mid];
return mid<index?nth(arr,mid+1,high,index):nth(arr,low,mid-1,index);
}
int nth( int* arr, int low, int high, int index )
{
if(mid==index)return arr[mid];
while(low<high)
return mid<index?nth(arr,mid+1,high,index):nth(arr,low,mid-1,index);
}
void swap( int& a, int& b )
{
if ( a == b ) return;
a ^= b;
b ^= a;
a ^= b;
}
int partation( int* arr, int low, int high )
{
int ans = low - 1;
for ( int i = low; i < high; ++i )
{
if ( arr[i] < arr[high] )
{
swap( arr[i], arr[++ans] );
}
}
swap( arr[++ans], arr[high] );
return ans;
}
int nth( int* arr, int low, int high, int index )
{
while( low < high )
{
int mid = partation(arr, low, high);
if ( mid == index ) return arr[mid];
if ( mid < index ) return nth( arr, mid+1, high, index );
if ( mid > index ) return nth( arr, low, mid-1, index );
}
}
if ( mid == index ) return arr[mid];
else if ( mid < index ) return nth( arr, mid+1, high, index );
else if ( mid > index ) return nth( arr, low, mid-1, index );
int nth( int* arr, int low, int high, int index )
{
while( low < high )
{
int mid = partation(arr, low, high);
if ( mid == index ) return arr[mid];
if ( mid < index ) return nth( arr, mid+1, high, index );
if ( mid > index ) return nth( arr, low, mid-1, index );
}
}//加个return; 当low>=high 时 函数没有返回值