奇偶排序

来源:互联网 发布:mac表格使用教程 编辑:程序博客网 时间:2024/05/18 03:02

描述

有一个数组,要求你把奇数都放到数组的左边,偶数都放到数组的右边。设计一种时间较少,空间也较少的”排序”算法。

解决

可以参考快排的思想。我们设置两个指针,left = 0, right = n - 1;,left向右走,遇到偶数停下来;right向左走,遇到奇数停下来。然后交换这两个指针所在位置的数,直到两个指针相等跳出。这样的时间复杂度O(n),空间复杂度O(1).

Code :

void sort(int a[], int n){    int left = 0, right = n - 1;    while (left < right) {        for (;left < right && a[left] % 2 == 1; left++);        for (;left < right && a[right] % 2 == 0; right--);        if (left < right)            swap(a[left], a[right]);    }}
0 0
原创粉丝点击