给你一个没有排序的数组,请将原数组就地重新排列满足如下性质:
nums[0] <= nums[1] >= nums[2] <= nums[3]....
请写一个函数实现此排序功能。
注意事项:
请就地排序数组,也就是不需要额外数组
格式:
输入第一行输入一个带排序的数组nums,最后输出按照要求排序后的数组序列。
样例输入
nums = [ 3,5,2,1,6,4 ]
样例输出
nums[0] <= nums[1] >= nums[2] <= nums[3]....
请写一个函数实现此排序功能。
注意事项:
请就地排序数组,也就是不需要额外数组
格式:
输入第一行输入一个带排序的数组nums,最后输出按照要求排序后的数组序列。
样例输入
nums = [ 3,5,2,1,6,4 ]
样例输出
[ 1,6,2,5,3,4 ]
C实现
#include <stdio.h>
void Data_Sort(int num[],int len);
int main(void)
{
int len,i;
printf("Please Input len:");
scanf("%d",&len);
int num[len];
printf("Please Input data:\n");
for(i=0;i<len;i++)
{
scanf("%d",&num[i]);
}
Data_Sort(num,len);
for(i=0;i<len;i++)
{
printf("%d,",num[i]);
}
printf("\n");
}
void Data_Sort(int num[],int len)
{
int i,j,temp;
int flag=0;
for(i=0;i<len;i++) //冒泡排序
{
for(j=0;j<len-1-i;j++)
{
if(num[j]>num[j+1])
{
temp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
}
}
}
for(i=1;i<=(len-1)/2;i++)//插入(len-1)/2 次
{
temp=num[len-1];
for(j=len-1;j>flag+1;j--)
{
num[j]=num[j-1];
}
num[flag+1]=temp;
flag=flag+2; //插入的位置每次加2
}
}