我想以某种方式对数组进行排序,以便它看起来像 - 一个[0]> = A [1] = A [2]> = [3]< = A [4] 我不知道从哪里开始。 任何建议将不胜感激!
答案 0 :(得分:2)
对整个数组进行排序(选择您想要的任何排序算法)。然后从头开始接受每一对并交换对中的元素
2,4,1,5,6,3,7,9,8,10
排序为:1,2,3,4,5,6,7,8,9,10
配对和交换:(2,1),(4,3),(6,5),(8,7),(10,9)
结果:2,1,4,3,6,5,8,7,10,9
答案 1 :(得分:1)
我在这里假设关系是包容性的(在某种意义上它们继续到行尾 - a [0]> = max(a [1],a [2],...) ,和[1]< = min(a [2],a [3],..)等等)。否则,这不是唯一定义的,因为{5,4,3,2,1}可以被分类为例如{5,1,4,3,2}或{3,2,5,1,4}。
所以,假设是这种情况,可以通过按降序对整个数组进行排序,然后只交错它们来轻松解决 -
a[0], a[n-1], a[1], a[n-2], ...
等等。只需循环使用两个索引,一个从头开始,一个从头开始,或者使用类似的东西 -
for (i=0; i<n/2; i++) {
result[i*2] = sorted[i];
result[i*2+1] = sorted[n-i];
}
if (n%2)
result[n-1] = sorted[n/2]
答案 2 :(得分:1)
这是代码,显然你可以改变数组长度和数字以符合你的规格。
#include <iostream>
#include <algorithm>
using namespace std;
void special_Sort(int *array, int size){
//doesn't return a value, changes the values inside the array
int temp;
//for swapping purposes
sort(array, array+size);
//sorts the array in ascending order
for(int i=0; i<size; i=i+2){
temp=array[i];
array[i]=array[i+1];
array[i+1]=temp;
}
//array is now sorted
}
int main(){
// array declaration, call the function, etc...
int array[10]={2,4,1,5,6,3,7,9,8,10};
int *pointer;
pointer=&array[0];
special_Sort(pointer, 10);
// if you want to print the result
// for(int i =0; i<10; i++)
// cout<<array[i]<<" ";
return 0;
}
答案 3 :(得分:0)
如果您只是按照希望值随意上升和下降的方式对其进行排序,则可以通过检查数组中的值并交换元素(如果它们不满足您的排序约束)来实现此目的。
目前我还没有编译器,你必须实现交换,但这样的事情可能会有效:
for(i=0; i < a.length(); i++){
//If index is even
if(i%2 == 0){
if(a[i] < a[i+1]){
swap(a[i], a[i+1]);
}
} else { ///If index is odd
if(a[i]>a[i+1]){
swap(a[i], a[i+1];
}
}
}
我不同意此处发布的其他答案,因此您必须根据偶数和奇数索引元素的关系找到所需内容。
答案 4 :(得分:0)
采取的步骤 :
1) 生成一些随机数组
2) 排序数组
3) 根据需要使用备用&lt; =,&gt; =比较
以下是执行该操作的代码 :(忽略随机生成器,它只是生成数组的简单方法)
#define sizeArr 50
int main(void)
{
int array[sizeArr];
int i, temp;
for(i=0;i<sizeArr;i++)
{
array[i]=randomGenerator(1, 1000);
Sleep(2);//force clock tick for new srand() to be effective in rand() generator
}
//sort array
qsort(array, sizeArr, sizeof(int), cmpfunc);
//pick the first non repeat 90th percent and print
for(i=0;i<sizeArr-1;i++)
{
if(i%2==0)//alternate between >= && <=
{
if(array[i+1] >= array[i])
{
temp = array[i+1];
array[i+1]=array[i];
array[i]=temp;
}
}
else
{
if(array[i+1] <= array[i])
{
temp = array[i+1];
array[i+1]=array[i];
array[i]=temp;
}
}
}
getchar();
return 0;
}
int cmpfunc (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int randomGenerator(int min, int max)
{
int random=0, trying=0;
trying = 1;
srand(clock());
while(trying)
{
random = (rand()/32767.0)*(max+1);
(random >= min) ? (trying = 0) : (trying = 1);
}
return random;
}