#include<stdio.h> void sort(int *p, int len) { int *end = p; end = p + len - 1; while (p<end) { if (*p % 2 == 0) { while (end) { if (*end % 2 == 1) { break; } end--; } int tmp = *end; *end = *p; *p = tmp; p++; } else { p++; } } } int main() { int arr[] = { 3,5,4,8,9,5,6,2,6}; int len = sizeof(arr) / sizeof(arr[0]); sort(arr,len); int i = 0; for (i = 0; i < len; i++) { printf("%d", arr[i]); } return 0; } 输出结果为3,5,5,9,8,4,6,2,6 这道题我的的想法是定上两个标志,一个指向首部一个指向尾部,判断首元素如果是奇数则不管他,如果是偶数则和最后一个比较,这是如果尾部元素是奇数则交换否则尾部元素向前移动,直到找到奇数,依次循环,直到两个标志相遇停下。
时间: 2024-10-25 03:23:31