可能能确定某个数的最终位置,,但不一定对,以后再想
#include<bits/stdc++.h>
using namespace std;
void swap(int &a,int &b)//交换两数
{
int c=a;
a=b;
b=c;
}
bool less_ (int a,int b)//a<b为真
{
if(a<b) return true;
else return false;
}
void f(int a[],int n)
{
int s=0;
int i=0,j=n-1;
while(i!=j)
{
do//从右往左扫描
{
if(a[j]<a[i]) {swap(a[i],a[j]);break;}//若后小于前 则交换,交换后跳出循环
}while(i!=j&&j--&&i!=j);
if(i==j) break;i++;
do
{
if(a[j]<a[i]) {swap(a[i],a[j]) ;break;}//若后小于前 则交换,交换后跳出循环
}while(i!=j&&i++&&i!=j);
if(i==j) break;j--;
}
//表示当i==j时的元素的最终位置
cout<<i<<": "<<a[i];
}
int main()
{
int a[]= {1,11,566,6,8,7,15};
f(a,7);
}
一下是一些例子的验算结果:
很多都是能确定第一个元素的最多位置qaq