C/C++实现快速排序

来源:互联网 发布:网络语古耐是什么意思 编辑:程序博客网 时间:2024/05/21 22:42
 
/*** @file GM_QSort.h* @brief 实现快速排序* @author Don Hao* @date 2011-8-21 22:31:06* @version * <pre><b>copyright: </b></pre>* <pre><b>email: </b>hao.limin@gmail.com</pre>* <pre><b>company: </b>http://blog.csdn.net/donhao</pre>* <pre><b>All rights reserved.</b></pre>* <pre><b>modification:</b></pre>* <pre>Write modifications here.</pre>*/#ifndef _GM_QSORT_H#define _GM_QSORT_H#ifdef __cplusplusextern"C"{#endif /**< __cplusplus */    /**     * @brief GM_QSort     *     * Detailed description.    * @param[in] data 要排列的数组    * @param[in] size 数组大小    * @param[in] isDes 1,为降序排列,否则为升序    */    void GM_QSort(char* data, int size, int isDes);#ifdef __cplusplus}#endif /**< __cplusplus */#endif /**< _GM_QSORT_H */

/*** @file GM_QSort.c* @brief * @author Don Hao* @date 2011-8-21 22:31:08* @version * <pre><b>copyright: </b></pre>* <pre><b>email: </b>hao.limin@gmail.com</pre>* <pre><b>company: </b>http://blog.csdn.net/donhao</pre>* <pre><b>All rights reserved.</b></pre>* <pre><b>modification:</b></pre>* <pre>Write modifications here.</pre>*/#include "GM_QSort.h"#include <stdlib.h>#include <stdio.h>void GM_QSort( char* data, int size, int isDes ){    int pivot = 0;    int i     = 0;    int j     = size - 1;    if (NULL == data)    {        return;    }    if (size > 1)    {        pivot = data[0];    }    else    {        return;    }    if (1 == isDes)    {        while(i < j)        {            while((i < j) && (data[j] < pivot))            {                --j;            }            while((i < j) && (data[i] > pivot))            {                ++i;            }            if (i < j)            {                data[i] ^= data[j];                data[j] ^= data[i];                data[i] ^= data[j];            }        }        GM_QSort(data, i + 1, isDes);        GM_QSort(data + i + 1, size - i - 1, isDes);    }    else    {        while(i < j)        {            while((i < j) && (data[j] > pivot))            {                --j;            }            while((i < j) && (data[i] < pivot))            {                ++i;            }            if (i < j)            {                data[i] ^= data[j];                data[j] ^= data[i];                data[i] ^= data[j];            }        }        GM_QSort(data, i + 1, isDes);        GM_QSort(data + i + 1, size - i - 1, isDes);    }    }void main(){    char a[10] = {1, 8, 3, 6, 5, 4, 7, 2, 9, 0};    char b[10] = {1, 8, 3, 6, 5, 4, 7, 2, 9, 0};    GM_QSort(a, 10, 1);    GM_QSort(b, 10, 0);}
原创粉丝点击