全部学习汇总: GreyZhang/c_basic: little bits of c. (github.com)
最近在重新学习C语言的数据结构,找了一份国外的电子书一点点看。刚刚学完双向链表,接下来的任务是搞定几个常用的排序。
冒泡排序还算是我比较熟悉的,工作之后遇到的排序功能我基本上都是首选这个算法进行排序功能的实现。
冒泡排序是把一个序列分为已经排序的和没有排序的两部分,左侧的数据作为排好序的部分,右侧的为未排序部分。从最左边的一个数据开始作为比较对象,依次遍历比较右边的数据。如果右边的数据比左边的小,那么两者交换位置。完成右边的便利比较之后,左侧的数据成为已经排好序的部分。接下来,进行第二个数据的排序。如此循环,直到处理完整个数据序列。
一个C语言的冒泡排序核心代码实现如下:
void BubbleSort(int *array,size_t array_size)
{
int i = 0;
int j = 0;
for(i = 0; i < array_size; i++)
{
for(j = i + 1; j < array_size; j++)
{
if(array[i] > array[j])
{
array[i] = array[i] ^ array[j];
array[j] = array[i] ^ array[j];
array[i] = array[i] ^ array[j];
}
}
}
}
void ArrayPrint(int *array,size_t array_size)
{
int i = 0;
for(i = 0; i < array_size; i++)
{
printf("%d,",array[i]);
}
}
测试数据以及主函数中的测试调用主要代码如下:
#include "stdio.h"
#include "bubble_sort.h"
int test_array[12] = {1,3,5,7,2,5,9,5,21,55,1,0};
int main(void)
{
printf("before sorted:\n");
ArrayPrint(test_array,MY_CARD(test_array));
BubbleSort(test_array,MY_CARD(test_array));
printf("\nafter sorted:\n");
ArrayPrint(test_array,MY_CARD(test_array));
return 0;
}
编译运行结果如下:
测试看来,编译环境正常,排序正确。