c语言指针冒泡排序

一池春水

冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

在C语言中,指针是处理数组和动态内存分配的重要工具。指针变量存储了另一个变量的内存地址。使用指针可以更高效地实现冒泡排序算法,因为它们允许直接通过内存地址访问和修改数据。

以下是使用指针实现冒泡排序的示例代码:

#include 

// 交换两个整数的函数
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

// 冒泡排序函数
void bubbleSort(int *arr, int n) {
    int i, j;
    for (i = 0; i < n - 1; i  ) {
        // 设置一个标志,用于优化冒泡排序
        int swapped;
        swapped = 0;
        for (j = 0; j < n - i - 1; j  ) {
            // 使用指针进行比较和交换
            if (*(arr   j) > *(arr   j   1)) {
                swap((arr   j), (arr   j   1));
                swapped = 1;
            }
        }
        // 如果在这一轮排序中没有交换过,说明数组已经有序,可以提前结束
        if (swapped == 0)
            break;
    }
}

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

// 主函数
int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr)/sizeof(arr[0]);
    printf("Original array: \n");
    printArray(arr, n);
    
    bubbleSort(arr, n);
    
    printf("Sorted array: \n");
    printArray(arr, n);
    return 0;
}

在上述代码中,swap 函数通过指针参数交换两个元素的值。bubbleSort 函数是冒泡排序算法的核心,它接受一个整数数组的指针和数组的长度。在每次遍历中,它比较相邻的元素,如果需要则交换它们。通过使用指针,我们可以直接访问数组中的元素,而不需要通过下标访问,这使得代码更加简洁和高效。

冒泡排序的时间复杂度通常是 O(n^2),在最坏的情况下(即数组完全逆序)需要进行 n*(n-1)/2 次比较和交换。然而,如果数组已经部分有序或完全有序,通过设置一个标志变量 swapped,我们可以在没有交换发生时提前结束排序过程,从而提高效率。

总的来说,使用指针实现冒泡排序可以提高代码的效率和可读性,同时也展示了C语言中指针的强大功能。

版权声明:本页面内容旨在传播知识,为用户自行发布,若有侵权等问题请及时与本网联系,我们将第一时间处理。E-mail:284563525@qq.com

目录[+]

取消
微信二维码
微信二维码
支付宝二维码