本文是本人读过《算法导论》之后所写,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;
}
View Code

相关文章:

  • 2021-04-03
  • 2021-06-28
  • 2021-12-10
  • 2021-09-14
猜你喜欢
  • 2021-05-17
  • 2021-07-08
  • 2022-12-23
  • 2022-12-23
  • 2021-07-05
相关资源
相似解决方案