1.最大奇数约数
int fun(int x)
{
if(x % 2 == 1) return x;
while(x)
{
x /= 2;
if(x %2 == 1)
{
break;
}
}
return x;
}
int main()
{
int x;
while (cin>>x)
{
cout<<fun(x)<<endl;
}
return 0;
}
2、找出第二大的数,要求用for遍历一遍
const int MinNum = 0x80000000;
int Find_2_K(int *arr,int n)
{
int Max = arr[0];
int Sec = MinNum;
for(int i=1;i<n;i++)
{
if(arr[i] > Max)
{
//更新值
Sec = Max;
Max = arr[i];
}
else if(arr[i] > Sec)
{
Sec = arr[i];
}
}
return Sec;
}
void main()
{
int arr[] = {1,2,3,4,5,6,7,8};
int n = sizeof(arr)/sizeof(arr[0]);
cout<<Find_2_K(arr,n)<<endl;
}
3、快速排序
//快速排序
int Patition(int *arr,int low,int high)
{
int mid = arr[low];
while(low < high)
{
while(low < high && arr[high] >= mid)
{
high--;
}
arr[low] = arr[high];
while(low < high && arr[low] <= mid)
{
low++;
}
arr[high] = arr[low];
}
arr[low] = mid;
return low;
}
void Quick(int *arr,int low,int high)
{
int p = Patition(arr,low,high);
if(low < p-1)
{
Quick(arr,0,p-1);
}
if(p+1 < high)
{
Quick(arr,p+1,high);
}
}
void QuickSort(int *arr,int n)
{
if(NULL == arr) return ;
Quick(arr,0,n-1);
}
void Show(int *arr,int n)
{
for(int i=0;i<n;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
void main()
{
int arr[] = {9,5,7,2,4,2,9,4,4};
int n = sizeof(arr)/sizeof(arr[0]);
QuickSort(arr,n);
Show(arr,n);
}
4、前K大(小)的数字
void Swap(T &a,T &b)
{
T tmp = a;
a = b;
b = tmp;
}
int Patition(int *arr,int low,int high)
{
int mid = arr[low];
while(low < high)
{
while(arr[high] <= mid && low < high)
{
high--;
}
//arr[low] = arr[high];
Swap(arr[high],arr[low]);
while(arr[low] >= mid && low < high)
{
low++;
}
//arr[high] = arr[low];
Swap(arr[low],arr[high]);
}
arr[low] = mid;
return low;
}
void Find_K(int *arr,int n,int k)
{
if(NULL == arr || n <= 0 || k > n) return ;
int low = 0;
int high = n-1;
int p = Patition(arr,low,high);
while(p != k-1)
{
if(k-1 < p)
{
//左边
p = Patition(arr,low,p-1);
}
if(k-1 > p)
{
p = Patition(arr,low+1,high);
}
}
//找到
//return arr[p];
//可以打印前K大
for(int i=0;i<k;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
int main()
{
int arr[] = {1,2,3,4,5,6};
int n = sizeof(arr)/sizeof(arr[0]);
Find_K(arr,n,2);
return 0;
}
5、奇数在前偶数在后(保持相对位置不变)
//奇数在前 偶数在后 利用冒泡思想
void fun(int *arr,int n)
{
for(int i=0;i<n-1;i++)
{
for(int j=n-1;j>i;j--)
{
if(arr[j]%2 == 1 && arr[j-1]%2 == 0)//后奇前偶则交换
{
swap(arr[j],arr[j-1]);
}
}
}
}
void Show(int *arr,int n)
{
for(int i=0;i<n;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
int main()
{
int arr[] = {1,2,3,4,5,6};
int n = sizeof(arr)/sizeof(arr[0]);
fun(arr,n);
Show(arr,n);
return 0;
}