C语言排序算法学习笔记(一)冒泡排序

冒泡排序(Bubble sort)

原理

每次比较两个数据大小并交换改变排序,直到符合规定顺序为止。
维基百科上面的流程解释:

1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

重点是从开始第一对到最后一对比较完毕时(也就是一轮比较下来),最后的元素是整个数列中最大的数
冒泡算法也因此得名:(在从小到大排序中)最小的元素会慢慢浮到数列顶端。

C语言实例

#include 
int main(int argc, char const *argv[])
{
	//由小到大排序
	int suite[10]={13,24,35,25,46,48,24,88,49,87};
	for (int i = 0; i < 9; ++i)
	//重复9次(比数列总数少一位),每次让最大的数沉到最后一位
		{
			for (int j = 0; j < 9-i; ++j)
			//(9-i)为每一轮重复次数,即(总项数-1-循环变量)
			//i是已经完成排序(沉到最底)项数的数量
			{
				if (suite[j] > suite[j+1])
				{
					suite[j] += suite[j+1];
					suite[j+1] = suite[j] - suite[j+1];
					suite[j] = suite[j] - suite[j+1];
				}
			}
		}
	
	for (int i = 0; i < 10; ++i)//打印结果
	{
		printf("U%d = %d.\n", i, suite[i]);
	}
	
	return 0;
}

其结果为:

U0 = 13. U1 = 24. U2 = 24. U3 = 25. U4 = 35. U5 = 46. U6 = 48. U7 =
49. U8 = 87. U9 = 88.

附录:

还是wiki上面的排序函数源码:

void bubble_sort(int arr[], int len) {
	int i, j, temp;
	for (i = 0; i < len - 1; i++)
		for (j = 0; j < len - 1 - i; j++)
			if (arr[j] > arr[j + 1]) {
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
}

这里用的交换数值用到了中间变量。
在测试冒泡算法的时候不想多设变量就用加减法交换数值,在这里是没出什么问题的。到后面测试快速排序(Quick Sort)的时候就出问题了。
看来还是设中间变量更加严谨。
后面写快速排序的时候再总结一下好了…

你可能感兴趣的:(C语言算法学习笔记)