逛奔的蜗牛

我不聪明,但我会很努力

   ::  :: 新随笔 ::  ::  :: 管理 ::
#include <iostream>
#include 
<ctime>
#include 
<cmath>

void quickSort(int *array, int first, int last) {
    
if (first >= last) {
        
return;
    }
    
    
int referenceValue = array[(first + last) / 2];
    
int i = first;
    
int j = last;
    
    
while (i <= j) {
        
// 如果没有i == j这一步, 则1, 2, 3, 4, 3排序是错误的
        while (i <= last && array[i] < referenceValue) {
            
++i;
        }
        
        
while (j >= first && array[j] > referenceValue) {
            
--j;
        }
        
        
if (i <= j) {
            
// 如果没有i == j这一步, 则3, 3, 3排序是死循环
            int temp = array[i];
            array[i] 
= array[j];
            array[j] 
= temp;
            
            
++i;
            
--j;
        }
    }
    
    quickSort(array, first, j);
    quickSort(array, i, last);
}

int main() {
    srand(time(
0));
    
int length = 0;
    
    
for (int count = 0; count < 20++count) {
        length 
= rand() % 20;
        
int *array = new int[length];
        
for (int i = 0; i < length; ++i) {
            
*(array + i) = rand() % 50;
        }
        
        quickSort(array, 
0, length - 1);
        
for (int i = 0; i < length; ++i) {
            std::cout 
<< array[i] << "";
        }
        
        delete[] array;
        
        std::cout 
<< std::endl;
    }
    
    
return 0;
}


测试结果:
17, 20, 23, 23, 28, 31, 39, 41,
2, 2, 6, 9, 10, 12, 20, 26, 28, 34, 40, 40, 44, 47,

6, 18, 20, 24, 30, 35, 47,
21, 22, 38, 43, 45, 45,
5, 19,
3, 7, 12, 17, 23, 29, 33, 36, 45, 45,
6, 17, 27, 29, 44, 45,
5, 10, 28, 29, 33, 37, 37, 49, 49,
27, 49, 49,
2, 2, 8, 11, 13, 17, 23, 23, 35, 39, 40,
3, 9, 17, 21, 24, 25, 33, 38,
0, 2, 13, 18, 23, 23, 29, 30, 38, 44,
1, 7, 7, 15, 16, 17, 17, 19, 24, 25, 40, 46, 46,
0, 4, 9, 14, 19, 25, 28, 29, 30, 35, 44, 45,
3, 19, 21, 21, 32, 48,
4, 9, 14, 20, 34, 35, 41,
0, 3, 3, 6, 9, 13, 21, 21, 21, 27, 29, 36, 38, 41, 44, 47,
2, 10, 18, 22, 24, 28, 36, 36, 44,
10, 25, 31, 

另一种快速排序,更好一点:

    // 快速排序是对起泡排序的一种改进

    public static void quickSort(int[] array) {

        quickSort(array, 0, array.length - 1);

    }

    

    public static void quickSort(int[] array, int low, int height) {

        if (low < height) {

            int pivotLoc = partition(array, low, height);

            quickSort(array, low, pivotLoc - 1);

            quickSort(array, pivotLoc + 1, height);

        }

    }


    public static int partition(int[] array, int low, int height) {

        int temp = array[low];

        while (low < height) {

            while (low < height && array[height] >= temp) --height;

            array[low] = array[height];

            

            while (low < height && array[low] <= temp) ++low;

            array[height] = array[low];

        }

        array[low] = temp;

        

        return low;

    }


    public static void print(int[] array) {

        System.out.print("[");

        for (int i = 0; i < array.length - 1; ++i) {

            System.out.print(array[i] + ", ");

        }

        if (array.length - 1 > 0) {

            System.out.print(array[array.length - 1]);

        }

        System.out.print("]");

    }



posted on 2008-04-08 18:13 逛奔的蜗牛 阅读(221) 评论(0)  编辑 收藏 引用 所属分类: C/C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理