C语言中的5种简单排序算法(适合小白)

yizhihongxing

C语言中的5种简单排序算法(适合小白)

介绍

排序算法是计算机科学中最基本的算法之一,其主要目的是将一组无序的数据按照一定的规则进行排列。在计算机程序设计中,排序算法是非常常用的操作之一。

本文将会介绍C语言中5种简单的排序算法,这些算法非常适合新手上手学习。

以下是5种简单排序算法的详细介绍和实例代码。

冒泡排序(Bubble Sort)

冒泡排序也是一种比较简单的排序算法,它的核心思想是:每次比较相邻两个元素,将较大的元素向后交换,直到将整个数组排列成升序。其中,n个元素要比较n-1轮,对于每一轮,都会比较n-1次。

此算法的时间复杂度为O(n^2),在数据量比较大的情况下,其效率较低。

下面给出C语言中的冒泡排序代码:

void bubbleSort(int arr[], int len){
    int i, j, temp;
    for(i = 0 ; i < len - 1; i++){
        for(j = 0 ; j < len - 1 - i ; j++){
            if(arr[j] > arr[j+1]){
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

下面是一个简单的示例:

int main(){
    int arr[] = {4, 2, 1, 5, 6, 3};
    int len = sizeof(arr) / sizeof(arr[0]);
    bubbleSort(arr, len);
    printf("排序后的数组为: ");
    for(int i = 0 ; i < len ; i++){
        printf("%d ", arr[i]);
    }
    return 0;
}

选择排序(Selection Sort)

选择排序也是一种简单常见的排序算法,它的核心思想是:通过n-i次关键字的比较,从n-i+1个记录中选取第i小的记录,并和第i个记录进行交换位置。

此算法的时间复杂度为O(n^2),在数据量较小的情况下,其效率较高。

下面给出C语言中的选择排序算法代码:

void selectSort(int arr[], int len){
    int i, j, minIndex, temp;
    for(i = 0 ; i < len - 1 ; i++){
        minIndex = i;
        for(j = i+1 ; j < len ; j++){
            if(arr[j] < arr[minIndex]){
                minIndex = j; 
            }
        }
        if(minIndex != i){
            temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }        
    }
}

下面是一个简单的示例:

int main(){
    int arr[] = {4, 2, 1, 5, 6, 3};
    int len = sizeof(arr) / sizeof(arr[0]);
    selectSort(arr, len);
    printf("排序后的数组为: ");
    for(int i = 0 ; i < len ; i++){
        printf("%d ", arr[i]);
    }
    return 0;
}

插入排序(Insertion Sort)

插入排序也是一种常见的排序算法,其核心思想是:将一个记录插入到已经排好序的有序序列中,从而得到一个新的有序序列。

此算法的时间复杂度为O(n^2),在数据量较小的情况下,其效率较高。

下面给出C语言中的插入排序算法代码:

void insertSort(int arr[], int len){
    int i, j, temp;
    for(i = 1 ; i < len ; i++){
        temp = arr[i];
        j = i - 1;
        while(j >= 0 && arr[j] > temp){
            arr[j+1] = arr[j];
            j--;
        }
        arr[j+1] = temp;
    }
}

下面是一个简单的示例:

int main(){
    int arr[] = {4, 2, 1, 5, 6, 3};
    int len = sizeof(arr) / sizeof(arr[0]);
    insertSort(arr, len);
    printf("排序后的数组为: ");
    for(int i = 0 ; i < len ; i++){
        printf("%d ", arr[i]);
    }
    return 0;
}

快速排序(Quick Sort)

快速排序是一种常用的排序算法,其核心思想是:通过一趟排序将待排记录分隔成两个独立的部分,其中一部分记录均比另一部分的记录小,则可分别对这两部分记录继续进行排序操作。

此算法的时间复杂度为O(nlogn),在数据量较大的情况下,其效率较高。

下面给出C语言中的快速排序算法代码:

void quickSort(int arr[], int low, int high){
    if(low < high){
        int mid = partition(arr, low, high);
        quickSort(arr, low, mid-1);
        quickSort(arr, mid+1, high);
    }
}

int partition(int arr[], int low, int high){
    int pivot = arr[low];
    while(low < high){
        while(low < high && arr[high] >= pivot){
            high--;
        }
        arr[low] = arr[high];
        while(low < high && arr[low] <= pivot){
            low++;
        }
        arr[high] = arr[low];
    }
    arr[low] = pivot;
    return low;
}

下面是一个简单的示例:

int main(){
    int arr[] = {4, 2, 1, 5, 6, 3};
    int len = sizeof(arr) / sizeof(arr[0]);
    quickSort(arr, 0, len-1);
    printf("排序后的数组为: ");
    for(int i = 0 ; i < len ; i++){
        printf("%d ", arr[i]);
    }
    return 0;
}

归并排序(Merge Sort)

归并排序是一种递归地将小的排序后的子序列合并成较大的已排序的序列。

此算法的时间复杂度为O(nlogn),在数据量较大的情况下,其效率较高。

下面给出C语言中的归并排序算法代码:

void mergeSort(int arr[], int left, int right){
    if(left < right){
        int mid = (left+right) / 2;
        mergeSort(arr, left, mid);
        mergeSort(arr, mid+1, right);
        merge(arr, left, mid, right);
    }
}

void merge(int arr[], int left, int mid, int right){
    int i, j, k;
    int n1 = mid - left + 1;
    int n2 = right - mid;
    int L[n1], R[n2];
    for(i = 0 ; i < n1 ; i++){
        L[i] = arr[left+i];
    }
    for(j = 0 ; j < n2 ; j++){
        R[j] = arr[mid+j+1];
    }
    i = j = 0;
    k = left;
    while(i < n1 && j < n2){
        if(L[i] <= R[j]){
            arr[k++] = L[i++];
        }
        else{
            arr[k++] = R[j++];
        }
    }
    while(i < n1){
        arr[k++] = L[i++];
    }
    while(j < n2){
        arr[k++] = R[j++];
    }
}

下面是一个简单的示例:

int main(){
    int arr[] = {4, 2, 1, 5, 6, 3};
    int len = sizeof(arr) / sizeof(arr[0]);
    mergeSort(arr, 0, len-1);
    printf("排序后的数组为: ");
    for(int i = 0 ; i < len ; i++){
        printf("%d ", arr[i]);
    }
    return 0;
}

结语

以上就是C语言中5种简单的排序算法,虽然算法不复杂,但掌握这些算法是非常有必要的,这也是程序员中最基础的能力之一。

由此,希望本文能帮助到想要学习C语言排序算法的初学者,如果有什么问题或建议,欢迎在评论区留言。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言中的5种简单排序算法(适合小白) - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • C++ 实现桶排序的示例代码

    下面是一份详细的攻略,带有示例说明。 桶排序简介 桶排序是一种基于计数的排序算法。它将一些数据分到不同的桶里,再对每个桶中的数据进行排序,最后按照桶的顺序依次输出所有数据,即可得到排好序的序列。 桶排序的时间复杂度是 $O(n)$,空间复杂度也是 $O(n)$,适用于元素值分布比较均匀的数据。 C++ 桶排序示例 下面是一份 C++ 实现桶排序的示例代码: …

    算法与数据结构 2023年5月19日
    00
  • PHP排序算法之冒泡排序(Bubble Sort)实现方法详解

    PHP排序算法之冒泡排序(Bubble Sort)实现方法详解 冒泡排序概述 冒泡排序是一种基本的排序算法,它的基本思想是比较相邻的两个元素,如果前一个元素比后一个元素大,就交换这两个元素,重复进行这个过程,直到没有任何一对元素需要比较为止。冒泡排序得名于通过交换相邻的元素来把最大值“冒泡”到数列的尽头。 冒泡排序的时间复杂度为O(n²),效率较低,但其思想…

    算法与数据结构 2023年5月19日
    00
  • C#算法之全排列递归算法实例讲解

    C#算法之全排列递归算法实例讲解 什么是全排列? 全排列是指将一个给定的集合中的元素进行排列,使得每个元素只出现一次,且每个元素在排列中的位置是不确定的,从而得到的所有不同排列。比如给定集合{1, 2, 3}的全排列包括{1, 2, 3}、{1, 3, 2}、{2, 1, 3}、{2, 3, 1}、{3, 1, 2}和{3, 2, 1}。 递归算法实现全排列…

    算法与数据结构 2023年5月19日
    00
  • TypeScript实现十大排序算法之归并排序示例详解

    TypeScript实现十大排序算法之归并排序示例详解 简介 本文将详细介绍使用 TypeScript 实现归并排序算法的步骤和示例。归并排序是一种非常有效的排序算法,它的时间复杂度为 O(nlogn),在大多数情况下都比快速排序更加稳定和可靠。 步骤 归并排序是一种典型的分治算法,其基本思路是将待排序的数组不断分割为较小的数组,直到每个小数组只有一个元素,…

    算法与数据结构 2023年5月19日
    00
  • PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】

    下面我将为您详细讲解“PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】”的完整攻略。 什么是字符串逆序排列? 字符串逆序排列指的是将一个字符串中的字符按照相反的顺序重新排列,比如将字符串 “hello world” 更改为 “dlrow olleh”。 使用strrev函数实现字符串逆序排列 PHP内置函数 strrev() 可以…

    算法与数据结构 2023年5月19日
    00
  • 分布式架构Redis中有哪些数据结构及底层实现原理

    分布式架构Redis中有哪些数据结构及底层实现原理 Redis支持的数据结构包括:字符串(String)、哈希表(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。 字符串(String) 字符串是Redis最基础的数据类型,与Java中的String类似,适用于存储任意二进制数据,可以存储字符串、数字、二进制数据等类型的数据。…

    算法与数据结构 2023年5月19日
    00
  • C/C++实现快速排序算法的思路及原理解析

    C/C++实现快速排序算法的思路及原理解析 快速排序算法是一种高效的排序算法,它的平均时间复杂度是 O(nlogn),最坏情况下的时间复杂度是 O(n^2)。快速排序算法的核心思想是分治法,通过不断将原问题分解成规模更小的子问题来实现排序。本文将详细讲解 C/C++ 实现快速排序算法的思路及原理解析,包括实现过程和两个示例说明。 快速排序算法实现原理 快速排…

    算法与数据结构 2023年5月19日
    00
  • Java全排列算法字典序下的下一个排列讲解

    Java全排列算法字典序下的下一个排列是一个经典的计算机算法问题,本攻略将为大家讲解如何使用Java实现。 思路 在Java中,全排列可以使用递归实现,也可以使用字典序算法实现。本攻略就是讲解如何使用字典序算法实现Java全排列算法中的找到下一个排列。 Java全排列算法中的字典序下一个排列可以按以下步骤实现: 从右到左找到第一个顺序对 (i,j),满足 A…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部