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日

相关文章

  • CSS规则层叠时的优先级算法

    当多个CSS规则(指选择器和声明的组合)作用于同一元素时,就会遇到规则层叠的问题,也就是优先级的问题。CSS规则层叠时的优先级算法主要分为以下4个级别: 元素样式或行内样式(Inline Style):元素样式指的是通过HTML元素的style属性定义的样式,行内样式(如在CSS中使用选择器设置)也具有同等优先级; ID选择器(ID Selector):指通…

    算法与数据结构 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
  • STl中的排序算法详细解析

    STl中的排序算法详细解析 概述 在STL中,sort是一种常用的排序算法。sort算法旨在将元素从小到大排序,但也可以使用cmp函数指定排序方式。 算法实现 sort算法基于“快速排序”算法的实现。其基本思想是从待排序列中选取一定的数值作为划分元素(pivot),通过一趟排序将所有比该元素小的数放到它的左边,所有比该元素大的数放到它的右边,然后再对左右两个…

    算法与数据结构 2023年5月19日
    00
  • 京东在数据挖掘方面对推荐技术的优化

    京东在数据挖掘方面对推荐技术的优化 京东是中国著名的电商平台,一直在推进自己的推荐系统技术,以提高用户交互体验和推广效果。在数据挖掘方面,京东对推荐技术进行了一系列的优化,包括以下几个方面: 1. 数据收集和处理 京东首先通过大数据技术收集和整理用户的行为数据,包括购买、浏览、评价等多个方面。同时利用机器学习技术进行数据建模,包括对用户画像、商品描述等方面的…

    算法与数据结构 2023年5月19日
    00
  • C语言排序算法之插入排序

    让我来详细讲解一下“C语言排序算法之插入排序”的完整攻略。 什么是插入排序? 插入排序是一种简单的排序算法,其原理是将一个数组分为两个部分,已排序和未排序。通过一次次取出未排序部分的首位元素,插入到已排序部分中正确的位置,最终实现整个数组的排序。 插入排序算法的步骤 插入排序的具体步骤如下: 将待排序数组分成已排序和未排序两个部分,第一个元素默认为已排序部分…

    算法与数据结构 2023年5月19日
    00
  • JavaScript实现数组全排列、去重及求最大值算法示例

    JavaScript实现数组全排列、去重及求最大值算法示例 实现数组全排列 数组的全排列即为将数组中所有元素进行全排列的结果。实现数组全排列的常用方法为回溯法。 回溯法的思想是从第一个元素开始,固定第一个元素,对于剩下的元素进行全排列,得到结果后将第一个元素与第二个元素交换,并对第二个元素之后的元素进行全排列,以此类推,直到最后一个元素,此时将所有的结果返回…

    算法与数据结构 2023年5月19日
    00
  • 前端JavaScript多数元素的算法详解

    前端JavaScript多数元素的算法详解 算法介绍 多数元素在一个数组中出现次数超过一半的元素,因此要找到多数元素,需要考虑其出现次数是否超过了数组长度的一半。本文介绍三种常见的多数元素算法,分别为排序法、哈希表法和摩尔投票法。 排序法 排序法的思路是先对数组进行排序,然后返回数组中间的那个元素即可。由于多数元素出现次数超过了数组长度的一半,因此排序后中间…

    算法与数据结构 2023年5月19日
    00
  • C语言 奇偶排序算法详解及实例代码

    C语言奇偶排序算法详解及实例代码 本篇文章将详细讲解C语言中奇偶排序算法的原理、实现方法及具体的实例代码,并通过两个示例说明其使用方法。 原理介绍 奇偶排序算法又叫交替排序算法,是一种简单但较慢的排序算法,通常用于小型数据集中的排序。该算法通过使用两个线程分别对奇数位置和偶数位置的元素进行比较和交换来实现排序。 该算法的原理如下: 从头到尾扫描一遍待排序数组…

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