c语言5个常用的排序算法实例代码

C语言5个常用的排序算法实例代码

本文旨在讲解C语言中常用的5种排序算法,包括冒泡排序、选择排序、插入排序、快速排序和归并排序。以下将逐一介绍它们的实现过程,并提供示例代码。

冒泡排序(Bubble Sort)

  1. 算法思想:冒泡排序是一种简单的排序算法,它会首先比较相邻的元素,如果它们的顺序不正确,就交换它们的位置。这样一遍比较下来,最后一个元素就已经是最大的了,接着再执行n-1遍排序,每次比较的元素数量减一。

  2. 算法步骤

  3. 遍历数组,比较相邻的两个元素,如果它们的顺序不正确则进行交换,将较大的元素交换到后面

  4. 执行n-1遍遍历
  5. 排序完成

  6. 示例代码

void bubbleSort(int arr[], int n){
    int i, j, temp;
    for (i = 0; i < n-1; i++){
        for (j = 0; j < n-i-1; j++){
            if (arr[j] > arr[j+1]){
                // 交换arr[j]与arr[j+1]的值
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

选择排序(Selection Sort)

  1. 算法思想:选择排序的基本思想是每一次选择一个最小的元素放到数组的头部,再选择一个次小的元素放到数组的第二个位置,以此类推。

  2. 算法步骤

  3. 遍历数组,记录数组中最小元素的下标

  4. 交换最小元素和数组头部元素的位置
  5. 重复以上操作,直到数组排序完成。

  6. 示例代码

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;
            }
        }
        // 交换arr[i]和arr[min_idx]的值
        temp = arr[i];
        arr[i] = arr[min_idx];
        arr[min_idx] = temp;
    }
}

插入排序(Insertion Sort)

  1. 算法思想:插入排序的基本思想是通过将未排序的元素逐一插入到已排序的序列中,从而依次排好序。

  2. 算法步骤

  3. 将当前元素存储在一个临时变量中,然后向前扫描已排序好的元素,将当前元素插入到合适的位置。

  4. 重复以上操作,直到数组排序完成。

  5. 示例代码

void insertionSort(int arr[], int n){
    int i, j, key;
    for (i = 1; i < n; i++){
        key = arr[i];
        j = i-1;
        while (j >= 0 && arr[j] > key){
            arr[j+1] = arr[j];
            j = j-1;
        }
        arr[j+1] = key;
    }
}

快速排序(Quick Sort)

  1. 算法思想:快速排序使用了一种分治的策略,在数据集之中选择一个元素作为"基准"(pivot),所有比基准值小的元素放在基准前面,所有比基准值大的元素放在基准的后面(相同的数可以放到任一边)。然后递归地在两个子序列上重复该过程,直至每个子序列只有一个元素为止。

  2. 算法步骤

  3. 选择一个元素作为基准值(pivot)。

  4. 将数组分成两个子数组:小于基准值的元素构成一个子数组,大于等于基准值的元素构成另一个子数组。
  5. 对子数组进行递归操作,直至子数组中只有一个元素。

  6. 示例代码

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

int partition (int arr[], int low, int high){
    int pivot = arr[high];
    int i = (low - 1);

    for (int j = low; j <= high- 1; j++){
        if (arr[j] < pivot){
            i++;
            // 交换arr[i]和arr[j]的位置
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    // 交换arr[i+1]和arr[high]的位置
    int temp = arr[i+1];
    arr[i+1] = arr[high];
    arr[high] = temp;
    return (i + 1);
}

归并排序(Merge Sort)

  1. 算法思想:归并排序使用了一种分治的策略,将待排序的数组递归地分成两个大小大致相同的子数组,再将两个子数组排序,最后将排好序的子数组合并成一个排序好的数组。

  2. 算法步骤

  3. 分割:将数组从中间分成两个子数组,继续递归分割。

  4. 排序:将两个元素排序。
  5. 合并:将两个排好序的子数组合并成一个数组。

  6. 示例代码

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 + 1+ j];
    }

    i = 0;
    j = 0;
    k = left;

    while (i < n1 && j < n2){
        if (L[i] <= R[j]){
            arr[k] = L[i];
            i++;
        }
        else{
            arr[k] = R[j];
            j++;
        }
        k++;
    }

    while (i < n1){
        arr[k] = L[i];
        i++;
        k++;
    }

    while (j < n2){
        arr[k] = R[j];
        j++;
        k++;
    }
}

以上便是C语言中5种常用排序算法的实现过程和示例代码,选择何种排序算法主要应根据数据的规模、性质和要求决定。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c语言5个常用的排序算法实例代码 - Python技术站

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

相关文章

  • 如何利用Python动态展示排序算法

    首先,我们需要了解一下Python中常用的用于动态展示的库——matplotlib和pygame。 matplotlib是一个数据可视化库,它可以让我们轻松地创建各种静态和动态的图形,包括折线图、柱形图等等,而pygame则是一个开源的游戏开发库,它专用于创建游戏和动态图形。 接下来,我们就可以使用这两个库来展示排序算法了。 下面是一个示例,展示了如何使用m…

    算法与数据结构 2023年5月19日
    00
  • PHP实现常用排序算法的方法

    一、常用排序算法 常见的排序算法包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序等。 冒泡排序: 基本思想是每次比较相邻的两个元素,如果前者比后者大,则将它们交换位置,最终使得从左到右的每个元素都是当前序列中最小的。 选择排序: 基本思想是每次从未排序的数中选取最小的数,并将其放到已排序序列的末尾。 插入排序: 基本思想是从无序序列中取…

    算法与数据结构 2023年5月19日
    00
  • 纯python实现机器学习之kNN算法示例

    首先我们需要清楚kNN算法的基本思想。kNN算法是一种基于实例的有监督学习算法,可以用于分类和回归问题。对于一个新的未标记数据,该算法会根据其与训练集中数据的距离,找到距离该点最近的k个点,然后根据这k个点的标签或者值来对该点进行分类或回归。 以下是具体实现步骤: 准备数据 kNN算法需要一个已经标记好的训练数据集。这里我们以Iris花卉数据集为例。我们先把…

    算法与数据结构 2023年5月19日
    00
  • C语言的冒泡排序和快速排序算法使用实例

    C语言的冒泡排序和快速排序算法使用实例 什么是排序算法 排序算法是一种将一组数据按照特定顺序排列的算法。常见的排序算法包括冒泡排序、快速排序、插入排序、选择排序等。 冒泡排序 冒泡排序是一种简单的排序算法,它重复地走访过要排序的元素,依次比较相邻两个元素,如果它们的顺序错误就交换它们的位置。重复这个过程,直到没有再需要交换的元素,即排序完成。 以下是 C 语…

    算法与数据结构 2023年5月19日
    00
  • c#实现最简洁的快速排序(你绝对可以看懂)

    下面我将详细讲解“c#实现最简洁的快速排序(你绝对可以看懂)”的完整攻略。 1、什么是快速排序? 快速排序是一种常用的排序算法,其思想是将一个数组划分为两个子数组,然后分别对这两个子数组进行排序。通过不断地递归调用这个过程,最终得到有序的数组。 2、快速排序的步骤 下面是快速排序的步骤: 选择一个基准值(pivot),一般选择数组中的第一个元素。 定义两个指…

    算法与数据结构 2023年5月19日
    00
  • C语言深入探究直接插入排序与希尔排序使用案例讲解

    C语言深入探究直接插入排序与希尔排序使用案例讲解 直接插入排序 算法描述 直接插入排序的基本思想是将一个记录插入到已经排序好的有序表中,从而得到一个新的、记录数增加1的有序表。具体算法流程如下: 从第一个元素开始,该元素可以认为已经被排序 取出下一个元素,在已经排序的元素序列中从后向前扫描 如果该元素大于新元素,将该元素移到下一位置 重复步骤3,直到找到已排…

    算法与数据结构 2023年5月19日
    00
  • C#中使用基数排序算法对字符串进行排序的示例

    下面是使用基数排序算法对字符串进行排序的完整攻略。 什么是基数排序算法? 基数排序算法是一种非比较排序算法,它先按照低位进行排序,然后再按照高位进行排序。在对一组字符串进行排序时,可以先按照字符串的最后一位进行排序,然后再按照倒数第二位进行排序,逐步地按照每一位进行排序,最终完成整组字符串的排序。 C#中实现基数排序算法的步骤 在 C# 中实现基数排序算法需…

    算法与数据结构 2023年5月19日
    00
  • 2019年京东前端工程师面试题(附答案)

    本次将会以京东前端工程师面试题为例,详细讲解如何准备和应对前端岗面试。 第一步:了解面试整体流程和考察的技能点 在准备面试前,需要先了解面试的整体流程和所考察的技能点,从而根据需要和缺点来进行有针对性的准备。 面试的整体流程一般包括: 自我介绍和岗位广告 聊聊项目和技术栈 问题解答和技术评测 算法/编码能力测试 HR面试 而在前端工程师的岗位面试中,考察的技…

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