10.21 冒泡排序
借助一道题来练习排序算法:
(从小到大)冒泡排序是每次比较相邻的两个元素大小,如果第一个比第二个大,交换位置,直到末尾。每次到达末尾之后当前元素作为新的末尾进行下一次冒泡。直到再也没有需要交换的。
图解:
算法实现:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
void Swap(int *a, int *b) {
int k;
k = *a;
*a = *b;
*b = k;
}
void BubbleSort(int *nums, int numsSize) {
int i, j;
int last_pos, is_sorted = 1;
last_pos = numsSize-1;
/* 冒泡排序 */
for (i = last_pos; i > 0; i--) {
//以上次结束的位置为准
is_sorted = 1; //每次开始前先假定有序
for (j = 0; j < i; j++) {
if (nums[j] > nums[j + 1]) {
Swap(&nums[j], &nums[j + 1]);
last_pos =