目 录CONTENT

文章目录
C

C-排序算法

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

一、冒泡排序

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

void bubbleSort(int arr[], int n) {
    int i, j, temp;
    int swapped;
  
    for (i = 0; i < n-1; i++) {
        swapped = 0;
        // 每一轮将最大的元素冒泡到末尾
        for (j = 0; j < n-i-1; j++) {
            // 如果当前元素大于下一个元素,则交换它们
            if (arr[j] > arr[j+1]) {
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
                swapped = 1;
            }
        }
        // 如果没有发生交换,说明数组已经有序
        if (swapped == 0)
            break;
    }
}

// 打印数组函数
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

评论区