1.冒泡排序
/** * @file GM_BSort.h * @brief 冒泡排序 * @author * @date * @version */ #ifndef _GM_BSORT_H #define _GM_BSORT_H #ifdef __cplusplus extern"C" { #endif /**< __cplusplus */ /** * @brief GM_BSort * * Detailed description. * @param[in] data 要排列的数组 * @param[in] size 数组大小 * @param[in] isDes 1,为降序排列,否则为升序 */ void GM_BSort(char* data, int size, int isDes); #ifdef __cplusplus } #endif /**< __cplusplus */ #endif /**< _GM_BSORT_H */
/** * @file GM_BSort.c * @brief * @author * @date * @version */ #include "GM_BSort.h" #include <stdlib.h> #include <stdio.h> void GM_BSort( char* data, int size, int isDes ) { int i = 0; int j = 0; if (NULL == data) { return; } if (1 == isDes) { for (i = 0; i < size; ++i) { for (j = 0; j < size - i - 1; ++j) { //采用异或的方法来交换两个数据的内容 if (data[j] < data [j + 1]) { data[j] ^= data [j + 1]; data[j + 1] ^= data[j]; data[j] ^= data [j + 1]; } } } } else { for (i = 0; i < size; ++i) { for (j = 0; j < size - i - 1; ++j) { if (data[j] > data [j + 1]) { data[j] ^= data [j + 1]; data[j + 1] ^= data[j]; data[j] ^= data [j + 1]; } } } } } int 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_BSort(a, 10, 1); GM_BSort(b, 10, 0); }2.插入排序
/** * @file GM_ISort.h * @brief 实现插入排序 * @author * @date * @version */ #ifndef _GM_ISORT_H #define _GM_ISORT_H #ifdef __cplusplus extern"C" { #endif /**< __cplusplus */ /** * @brief GM_ISort * * Detailed description. * @param[in] data 要排序的数据 * @param[in] size 数据大小 * @param[in] isDesc 1:降序,否则升序 */ void GM_ISort(char* data, int size, int isDesc); #ifdef __cplusplus } #endif /**< __cplusplus */ #endif /**< _GM_ISORT_H */
/** * @file GM_ISort.c * @brief * @author * @date * @version */ #include "GM_ISort.h" #include <stdlib.h> #include <stdio.h> void GM_ISort( char* data, int size, int isDesc ) { int i = 0; int j = 0; int tmp = 0; if (NULL == data) { return; } if (1 == isDesc) { for (i = 1; i < size; ++i) { j = i; tmp = data[i]; while((j > 0) && (tmp > data[j - 1])) { data[j] = data[j - 1]; --j; } data[j] = tmp; } } else { for (i = 1; i < size; ++i) { j = i; tmp = data[i]; while((j > 0) && (tmp < data[j - 1])) { data[j] = data[j - 1]; --j; } data[j] = tmp; } } } int 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_ISort(a, 10, 1); GM_ISort(b, 10, 0); }3.快速排序
/** * @file GM_QSort.h * @brief 实现快速排序 * @author * @date * @version */ #ifndef _GM_QSORT_H #define _GM_QSORT_H #ifdef __cplusplus extern"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 * @date * @version */ #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); }