目 录CONTENT

文章目录
C

C-排序算法

~梓
2025-06-07 / 0 评论 / 0 点赞 / 20 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

一、冒泡排序

冒泡排序是一种简单的交换排序算法,核心思想是通过重复遍历待排序序列,两两比较相邻元素,若顺序错误(逆序)则交换它们,每一轮遍历会将当前未排序部分的最大(或最小)元素逐步 “冒泡” 到序列的末尾,直到整个序列有序。

  • 时间复杂度:O (n²)(最坏和平均情况),O (n)(最好情况,当数组已经有序时)
  • 空间复杂度:O (1)(只需要常数级的额外空间)
#include <stdio.h>


void BubbleSort(int arr[], int n) {
    int i, j, temp;
    for (i = 0; i < n - 1; i++) { // 外层循环控制排序趟数,共 n-1 趟
        for (j = 0; j < n - 1 - i; j++) { // 内层循环进行相邻元素比较
            if (arr[j] > arr[j + 1]) { // 如果逆序
                // 交换 arr[j] 和 arr[j+1]
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
        // 此处可以打印每一趟的结果,便于观察过程
    }
}

// 打印数组函数
void printArray(int arr[], int size) {
    int i;
    for (i = 0; i < size; i++)
        printf("%d ", arr[i]);
    printf("\n");
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr)/sizeof(arr[0]);
  
    printf("排序前的数组: \n");
    printArray(arr, n);
  
    bubbleSort(arr, n);
  
    printf("排序后的数组: \n");
    printArray(arr, n);
  
    return 0;
}

二、选择排序

  • 时间复杂度:O (n²)(所有情况)
  • 空间复杂度:O (1)(只需要常数级的额外空间)
#include <stdio.h>

void selectionSort(int arr[], int n) {
    int i, j, min_idx, temp;
  
    for (i = 0; i < n-1; i++) {
        // 找到未排序部分的最小元素
        min_idx = i;
        for (j = i+1; j < n; j++) {
            if (arr[j] < arr[min_idx])
                min_idx = j;
        }
  
        // 将找到的最小元素与未排序部分的第一个元素交换
        if (min_idx != i) {
            temp = arr[i];
            arr[i] = arr[min_idx];
            arr[min_idx] = temp;
        }
    }
}

void printArray(int arr[], int size) {
    int i;
    for (i = 0; i < size; i++)
        printf("%d ", arr[i]);
    printf("\n");
}

int main() {
    int arr[] = {64, 25, 12, 22, 11};
    int n = sizeof(arr)/sizeof(arr[0]);
  
    printf("排序前的数组: \n");
    printArray(arr, n);
  
    selectionSort(arr, n);
  
    printf("排序后的数组: \n");
    printArray(arr, n);
  
    return 0;
}
0
C

评论区