C语言排序算法之选择排序(直接选择排序,堆排序)

C语言排序算法之选择排序

选择排序概述

选择排序是一种简单直观的排序算法,其基本思想是:每一趟从数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列最后,直到全部数据元素排完为止。

选择排序算法的时间复杂度为O(n^2),在数据规模较小时效率较高,但是在数据规模较大时效率较低。

选择排序示例

以下是一个使用选择排序算法对数组进行排序的示例:

#include <stdio.h>

void selection_sort(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;
            }
        }

        //将找到的最小元素放到已排序序列的末尾
        temp = arr[min_idx];
        arr[min_idx] = arr[i];
        arr[i] = temp;
    }
}

int main(void)
{
    int arr[] = { 64, 25, 12, 22, 11 };
    int n = sizeof(arr) / sizeof(arr[0]);

    selection_sort(arr, n);

    printf("排序后的数组:\n");
    for (int i = 0; i < n; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

输出结果为:

排序后的数组:
11 12 22 25 64 

堆排序概述

堆排序是利用堆这种数据结构设计的一种排序算法。其中堆是一个近似完全二叉树的结构,并同时满足堆特性:即父节点的键值总是大于或小于其子节点的键值。

堆排序算法的时间复杂度为O(nlogn),是效率较高的一种排序算法。

堆排序示例

以下是一个使用堆排序算法对数组进行排序的示例:

#include <stdio.h>

void heapify(int arr[], int n, int i)
{
    int largest = i;
    int l = 2 * i + 1; 
    int r = 2 * i + 2; 

    if (l < n && arr[l] > arr[largest])
    {
        largest = l;
    }

    if (r < n && arr[r] > arr[largest])
    {
        largest = r;
    }

    if (largest != i)
    {
        int temp = arr[i];
        arr[i] = arr[largest];
        arr[largest] = temp;

        heapify(arr, n, largest);
    }
}

void heap_sort(int arr[], int n)
{
    for (int i = n / 2 - 1; i >= 0; i--)
    {
        heapify(arr, n, i);
    }

    for (int i = n - 1; i >= 0; i--)
    {
        int temp = arr[0];
        arr[0] = arr[i];
        arr[i] = temp;

        heapify(arr, i, 0);
    }
}

int main()
{
    int arr[] = { 12, 11, 13, 5, 6, 7 };
    int n = sizeof(arr) / sizeof(arr[0]);

    heap_sort(arr, n);

    printf("排序后的数组:\n");
    for (int i = 0; i < n; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

输出结果为:

排序后的数组:
5 6 7 11 12 13 

以上就是选择排序和堆排序的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言排序算法之选择排序(直接选择排序,堆排序) - Python技术站

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

相关文章

  • C语言之直接插入排序算法的方法

    C语言直接插入排序算法的方法 什么是直接插入排序 直接插入排序,是一种应用最广泛的排序算法之一,也是一种稳定的排序算法。它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的有序表。具体的过程是将待排序的元素插入到已经排好序的元素中,使插入后仍保持有序。 代码实现 下面是用C语言实现直接插入排序算法的代码: void direct_insert…

    算法与数据结构 2023年5月19日
    00
  • c++归并排序详解

    C++归并排序详解 归并排序是一种基于分治思想的高效排序算法,它的时间复杂度为O(nlogn),并且它的稳定性使得它在实际应用中得到了广泛的应用。在本文中,我们将为大家详细讲解C++归并排序的具体实现过程和算法思想。 算法原理 归并排序基于分治算法,首先将待排序序列不断二分,直到每个子序列只剩一个元素,然后将相邻的子序列进行归并,合并后的子序列再次进行归并,…

    算法与数据结构 2023年5月19日
    00
  • C++归并排序算法详解

    C++归并排序算法详解 什么是归并排序 归并排序是一种基于“分治思想”的排序算法,它将待排序的数组不断分割成若干个子数组,直到每个子数组中只有一个元素。然后将那些只有一个元素的子数组归并成两个元素有序的子数组;接着将两个元素有序的子数组再次归并成四个元素有序的子数组;依次类推,直到归并为一个完整的排序数组。 归并排序的流程 1.分解:将待排序的数组从中间分割…

    算法与数据结构 2023年5月19日
    00
  • C语言常见排序算法之交换排序(冒泡排序,快速排序)

    交换排序主要有两种:冒泡排序和快速排序。下面我将分别详细介绍这两种排序算法的原理、过程和示例。 冒泡排序 原理 冒泡排序是一种基本的排序方法,它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。重复操作直到排序完成。 过程 冒泡排序的过程可以被描述如下: 比较相邻的元素。如果第一个比第二个大,就交换它们两个。 对每一对相邻元素做…

    算法与数据结构 2023年5月19日
    00
  • 如何用C++实现A*寻路算法

    一、什么是A*寻路算法? A寻路算法(A search algorithm),也叫A算法,是一种启发式搜索算法,常用于求解路径规划问题。A算法结合了Dijkstra算法和启发式搜索的优点,能够在保证找到最短路径的情况下,大大降低搜索的时间和空间消耗。 二、A*寻路算法的原理 1.最短路径 在计算机科学中,最短路径问题是指两点之间的所有路径中,经过的边或节点数…

    算法与数据结构 2023年5月19日
    00
  • Java实现插入排序,希尔排序和归并排序

    Java实现插入排序、希尔排序和归并排序 插入排序 插入排序算法的思路是:将一个待排序的数组(序列)分为两部分,前面的有序序列和后面的无序序列,将无序序列中的每一个元素插到有序序列中的适当位置,直到无序序列为空。 Java代码实现: public static void insertionSort(int[] arr) { int i, j, temp; f…

    算法与数据结构 2023年5月19日
    00
  • C++实现位图排序实例

    C++实现位图排序实例攻略 什么是位图排序 位图排序是一种空间换时间的算法,主要针对大量重复性数据的排序问题。其主要思想是将待排序的数据作为位图的索引,将出现的数据标识为1,最后按照位图的索引顺序输出结果。 如何实现位图排序 具体实现步骤如下: 确定位图最大数据值及位图长度。假设需要排序的数据范围是[1,10000],对应的位图长度为(10000/8)+1=…

    算法与数据结构 2023年5月19日
    00
  • 算法系列15天速成 第一天 七大经典排序【上】

    我会为你详细讲解“算法系列15天速成 第一天 七大经典排序【上】”的完整攻略。 标题 算法系列15天速成 第一天 七大经典排序【上】 内容 本文主要介绍了常用的七大经典排序算法,分别是插入排序、希尔排序、选择排序、冒泡排序、快速排序、归并排序以及堆排序。对每个算法的特点、实现过程和时间复杂度进行了详细的讲解,同时也对每个算法进行了简单的示例说明。 插入排序 …

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