C/C++实现冒泡法排序

时间:2022-02-03 04:20:56
  
/**
* @file GM_BSort.h
* @brief 冒泡排序
* @author Don Hao
* @date 2011-8-23 19:55:56
* @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_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 Don Hao
* @date 2011-8-23 19:55:58
* @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_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);

}