今天在论坛被问到冒泡排序,索性做个笔记:
1. 源码
#include <stdio.h>
// #define _BubbleSort_
#define _SelectSort_
/*******************************************************************************************
** 函数名称: BubbleSort()
** 作 者: zyh
** 版 本: 1.0.0
** 日 期: 2011-11-5
** 功能描述: 冒泡排序
** 输 入: 1. 原数组
2. 数组元素个数
** 输 出: 无
** 返 回 值: 无
** 其 他:
** 修改历史:
1. 修改时间:
修 改 者:
版 本:
修改简述:
2. ......
*********************************************************************************************/
void BubbleSort(int arrayIn[],int n)
{
int i; /* 控制外层循环 */
int j; /* 控制内层循环 */
for (i= 0; i < n - 1; i++) /*n个数,n-1轮比较*/
{
for (j = 0; j < n - i - 1; j++)
{
if (arrayIn[j] > arrayIn[j+1])
{
arrayIn[j] = arrayIn[j] ^ arrayIn[j+1];
arrayIn[j+1] = arrayIn[j] ^ arrayIn[j+1];
arrayIn[j] = arrayIn[j] ^ arrayIn[j+1];
}
}
}
}
/*******************************************************************************************
** 函数名称: SelcetSort()
** 作 者: zyh
** 版 本: 1.0.0
** 日 期: 2011-11-5
** 功能描述: 选择排序
** 输 入: 1. 原数组
2. 数组元素个数
** 输 出: 无
** 返 回 值: 无
** 其 他:
** 修改历史:
1. 修改时间:
修 改 者:
版 本:
修改简述:
2. ......
*********************************************************************************************/
void SelcetSort(int arrayIn[],int n)
{
int i; /* 控制外层循环 */
int j; /* 控制内层循环 */
int minSub; /* 最小元素的下标 */
for (i = 0; i < n - 1; i++)
{
minSub = i; /* 假设当前比较元素是最小的 */
for (j = i + 1; j < n; j++)
{
if (arrayIn[j] < arrayIn[minSub])
{
minSub = j;
}
}
if (minSub != i)
{
arrayIn[minSub] = arrayIn[minSub] ^ arrayIn[i];
arrayIn[i] = arrayIn[minSub] ^ arrayIn[i];
arrayIn[minSub] = arrayIn[minSub] ^ arrayIn[i];
}
}
}
int main(void)
{
int i; /* 控制打印输出 */
int arrayIn[6] = {2,9,6,4,5,0};
printf("Before sort: "); /* 排序前 */
for (i = 0; i < 6; i++)
{
printf("%d ",arrayIn[i]);
}
printf("\n");
#ifdef _BubbleSort_
BubbleSort(arrayIn,6); /* 冒泡排序 */
printf("Bubble sort: ");
for (i = 0; i < 6; i++)
{
printf("%d ",arrayIn[i]);
}
printf("\n");
#endif
#ifdef _SelectSort_
SelcetSort(arrayIn,6); /* 冒泡排序 */
printf("SelcetSort sort: ");
for (i = 0; i < 6; i++)
{
printf("%d ",arrayIn[i]);
}
printf("\n");
#endif
return 0;
}
2. 结果