🧿 前言:
还有一个学期就高考了,最近王老师总是能在操场上发现班里的男女同学成双成对的出现,于是准备给班里的座位来一次大调整。让男同胞们集体往后坐,女同胞集体往前坐。当然一些男同胞和男同胞之间的关系,王老师只能束手无策了,望同学们自爱…
/***********************************************************************
目的:有一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
分析:从数组的前面和后面往中间找:若前面找到偶数,后面找到奇数则交换两个数的位置
平台:Visual studio 2017 && windows
*************************************************************************/
📝 实现代码1
#include<stdio.h> void Swap_MW(int arr[], int sz) { int left = 0; int right = sz - 1; while(left < right) { //找偶数 while(arr[left] % 2 == 1) { left++; } //找奇数 while(arr[right] % 2 == 0) { right--; } //交换一对 if(left < right) { int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; } } } void Print(int arr[], int sz) { int i = 0; for(i = 0; i < sz; i++) { printf("%d ", arr[i]); } printf("\n"); } int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int sz = sizeof(arr) / sizeof(arr[0]); //交换 Swap_MW(arr, sz); //输出 Print(arr, sz); return 0; }
⭕ 输出结果:
❓❔ 当你觉得你又行了的时候,现实总会给你迎头痛击
▶ 当这个数组里的内容全是偶数或奇数时,将会越界,所以这个代码是有bug的
/***********************************************************************
目的:改bug
分析:无
平台:Visual studio 2017 && windows
*************************************************************************/
📝 修改代码1
#include<stdio.h> void Swap_MW(int arr[], int sz) { int left = 0; int right = sz - 1; while(left < right) { //找偶数 while((left < right) && (arr[left] % 2 == 1))//修改1 { left++; } //找奇数 while((left < right) && (arr[right] % 2 == 0))//修改2 { right--; } //交换一对 if(left < right) { int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; } } } void Print(int arr[], int sz) { int i = 0; for(i = 0; i < sz; i++) { printf("%d ", arr[i]); } printf("\n"); } int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int sz = sizeof(arr) / sizeof(arr[0]); //交换 Swap_MW(arr, sz); //输出 Print(arr, sz); return 0; }