177-实现:数组中的奇数位于偶数的前面

题目如下:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。同时保证原本数据的有序性,即奇数之间的相对位置不变,偶数之间的相对位置保持不变。
输入:nums = [1,2,3,4]
输出:[1,3,2,4]

解题思路如下:
1、利用插入排序的思想进行求解,定义k来表示已经排序好的奇数个数
2、遍历数组,如果是奇数,就进入if语句,将此奇数不断向前交换,然后k++;如果是偶数,就直接++i
可以保证数据的稳定性

#include<stdio.h>

void reOrderArray(int *arr,int len)
{
    
    
	int i = 0, j = 0;
	//类似于插入排序的思想
	int k = 0; //记录已经排好的奇数的个数
	for (; i < len; ++i)//遍历数组
	{
    
    
		if (arr[i] % 2 == 1)//如果是奇数
		{
    
    
			j = i;//j记录当前下标的值
			while(j > k)//下标值大于已经排列好的奇数的个数
			//把奇数往前移动
			{
    
    
				int tmp = arr[j];
				arr[j] = arr[j - 1];
				arr[j - 1] = tmp;
				--j;
			}
			++k;//已经排列好的奇数的个数+1
		}
	}
}

int main()
{
    
    
	int brr[]={
    
    1,2,4,3,5,6};
	int len=sizeof(brr)/sizeof(brr[0]);
	reOrderArray(brr,len);//调用调整函数
	for(int i=0;i<len;++i)
	{
    
    
		printf("%d ",brr[i]);
	}
	printf("\n");

	return 0;
}

运行结果如下:
在这里插入图片描述
代码演示图如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/LINZEYU666/article/details/113746575
今日推荐