102.png

    1. /*
    2. 设计一个算法:将顺序表中的奇数全部移到偶数前面(时间最少,空间最少)
    3. 分析:这里要求时空皆最少,所以不会使用到辅助空间,时间复杂度应为O(n)。其实我们可以一次遍历便可做到该要求
    4. 我们可以设计一个变量k=0,然后进行遍历,每当遇到一个奇数,便把奇数与k所对应的元素对调,k进行加一操作
    5. 书上采用的是快速排序,我没想到哈哈哈
    6. */
    7. #include <stdio.h>
    8. #include <stdlib.h>
    9. void swap(int &a, int &b) {
    10. int tmp;
    11. tmp = a;
    12. a = b;
    13. b = tmp;
    14. }
    15. void oddAHead(int *arr, int len) {
    16. int k = 0;
    17. for (int i = 0; i < len; i++) {
    18. if (arr[i] % 2) {
    19. swap(arr[i], arr[k++]);
    20. }
    21. }
    22. }
    23. int main() {
    24. int arr[] = { 1,2,4,4,5,6,7,8,9 };
    25. oddAHead(arr,9);
    26. return 0;
    27. }