给定一个数组,比如{1,2,2,2,3,3,4,5,6,6,7,7,8,8,8,9};要求进行区间调整,该数组为有序数组,令左半部分为增序,右半部分可以无序
比如这个数组,排序后左半部分就是 1 2 3 4 5 6 7 8 9,右半部分则是否增序无所谓。
思路:
设置两个变量 u 和i u初始为0 i初始为1
我们假定a【0】到a【u】为左半区间,a【u+1】到a【i】为右半区间
于是从左到右遍历
此题中 当i=1 2不等于a[u]=a[0]=1时候,交换a[u]
#include <iostream>
#include <algorithm>
using namespace std;
double arr[]={1,2,2,2,3,3,4,5,6,6,7,7,8,8,8,9};
int len=16;
void fun1()
{
int u=0;
int i=1;
//
for(;i<len;i++)
{
if(arr[i]!=arr[u])
{
u++;
swap(arr[i],arr[u]);
}
}
}
void Print()
{
for(int i=0;i<len;i++)
cout<<arr[i]<<" ";
cout<<endl;
}
int main()
{
fun1();
Print();
return 0;
}
本文深入探讨了如何通过一种简洁高效的算法,实现有序数组中左右两部分的区隔调整,其中左半部分保持有序,而右半部分则允许无序排列。通过设置两个指针u和i,从数组两端向中间遍历,当遇到不满足条件的元素时,通过交换操作调整元素位置,最终实现目标数组形态。
600

被折叠的 条评论
为什么被折叠?



