本文是本人读过《算法导论》之后所写,C代码实现是我尽量参照伪代码所写,如有错误,敬请指正。
*:所有排序算法默认从小到大排序,伪代码数组的首元素为A[1], 数组长度为n
一、冒泡排序
冒泡排序应该是最简单的比较排序了,排序原理就是重复遍历数组,每次比较相邻的两个元素,如果前一个元素大于后一个元素,则交换数组两个元素的位置。这样每遍历一次,最大的元素就会下沉到数组最底部,重复遍历n-1次,所有元素就都已排好序了。
伪代码:
1. for i = 1 to n-1
2. for j = 1 to n-i
3. if A[j] > A[j+1]
4. exchange A[j] with A[j+1]
伪代码讲解:
第一行控制遍历轮数;
第二行控制需要比较的数组元素下标范围;
第三四行,当相邻的两个元素不满足比较条件时,交换两个元素的位置
C代码:
/*Author:Terry Zhang*/ #include <stdio.h> #include <stdlib.h> int main(void) { size_t n = 0; scanf_s("%d", &n); int *p = (int *)calloc(n, sizeof(int)); for (size_t i = 0; i < n; i++) { scanf_s("%d", p + i); } int * p0 = p; for (size_t i = 0; i < n-1; i++) { for (size_t j = 0; j < n-i-1; j++) { int t = 0; if (p[j] > p[j + 1]) { t = p[j]; p[j] = p[j + 1]; p[j + 1] = t; } } } p0 = p; for (size_t i = 0; i < n; i++) { printf("%d ", *(p0++)); } printf("\n"); free(p); return 0; }