【C++】快速修改数组的问题

      记得去年上算法分析课的时候讲过怎么快速的修改数组,比如,把数组中偶数放在前面,奇数放在后面;把数组中能被三除尽的数放在前面,不能的则放在后面。。。
      如果,我没看到那道题我的思路肯定是一个一个的写函数呗,不就是快速排序的思想吗,不过,当我看到了那道题的解法后,发现,真的应该好好想想函数的通用性。
      下面,我直接贴出代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <stdio.h> 
   
int quick_insert_(int *data, int len, int (*fun)(int data)) 
    int left = 0; 
    int right = len - 1; 
   
    if (data == NULL || len <=1) 
    
        return 0; 
    
    while (left < right) 
    
        while (left < right && ! fun(data[left])) 
            left ++; 
        while (left < right && fun(data[right])) 
            right --; 
        if (left < right) 
        
            data[left] ^= data[right]; 
            data[right] ^= data[left]; 
            data[left] ^= data[right]; 
        
    
    return 0; 
   
   
int fun1(int data) 
    if (data & 0x1) 
    
        return 0; 
    
    else 
        return 1; 
   
int fun2(int data) 
    if (data % 3) 
    
        return 0; 
    
    else 
        return 1; 
   
int quick_insert(int *data, int len) 
    //quick_insert_(data, len, fun1); 
    quick_insert_(data, len, fun2);  
    return 0; 

其实,思想不难,就是再次定义一个函数指针,每次比较,只是比较只要传入相应的函数就可以完成所需要的功能。

 

 

posted @ 2013-09-26 10:51  来自你520的末班车  阅读(529)  评论(0编辑  收藏  举报