冒泡排序、插入排序和快速排序的介绍及C语言实现

createh52个月前 (05-03)技术教程20


1、排序算法的介绍

排序算法是将一组数据按照某种规则进行排列。

冒泡排序、插入排序、快速排序是最常用的算法。

2、冒泡排序

冒泡排序是的基本思想是通过不断比较相邻的两个元素,将较大的元素向后移动,从而实现排序。冒泡排序的时间复杂度为O(n^2)。

以下是C语言实现冒泡排序的示例代码:

void bubble_sort(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])
            {
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

3、插入排序

插入排序,是将待排序的数据分为两部分,已排序部分和未排序部分。每次从未排序部分中取出一个元素,在已排序部分中找到合适的位置插入该元素,从而实现排序。插入排序的时间复杂度为O(n^2)。

以下是C语言实现插入排序的示例代码:

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

4、快速排序

快速排序是一种分治算法,其基本思想是选择一个基准元素,将待排序的数据分成两部分,小于基准元素的放在左边,大于基准元素的放在右边,然后对左右两部分递归地进行快速排序,从而实现排序。快速排序的时间复杂度为O(nlogn)。

以下是C语言实现快速排序的示例代码:

void quick_sort(int arr[], int left, int right)
{
    if (left < right)
    {
        int i = left, j = right, pivot = arr[left];
        while (i < j)
        {
            while (i < j && arr[j] >= pivot) j--;
            if (i < j) arr[i++] = arr[j];
            while (i < j && arr[i] < pivot) i++;
            if (i < j) arr[j--] = arr[i];
        }
        arr[i] = pivot;
        quick_sort(arr, left, i - 1);
        quick_sort(arr, i + 1, right);
    }
}

相关文章

一文透彻解析冒泡排序(冒泡排序有几种方法)

谈一谈冒泡排序看到很多人谈算法题,上来就是一段代码,你去看去吧,自己悟去吧。心塞有的题目老长时间就是不理解。。。本文分析一下啥是冒泡排序?排序就是一组数字,按照顺序排列(从小到大) ,冒泡排序是排序的...

常见的三种排序(冒泡排序、插入排序、选择排序)

冒泡排序什么是冒泡排序?百度百科解释:它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要...

Python实现冒泡排序(python冒泡排序列表)

''' 冒泡排序原理:比较列表中相邻的两个元素大小,如果第2个元素比第1个元素大,就交换它俩的位置,从列表的开始到结尾, 依次对每一组相邻的2个元素都进行比较,这样最大的元素就...

用rust实现经典的冒泡排序和快速排序

1.假设待排序数组如下 let mut arr = [5, 3, 8, 4, 2, 7, 1];数组需要设计为可变的,让arr传递到函数的时候能够被借出2.冒泡排序法2.1.原理反复遍历列表,比较相...

西门子SCL编程实例——冒泡排序算法(更新版)

之前我曾写过一篇SCL冒泡排序算法的文章(西门子SCL语言编程实例——冒泡排序 | 北岛夜话),文中的算法在某些情况下会出现错误,原因是SCL语言的数组的上限和下限可以自由定义,这点与C/C++的不同...

排序算法——冒泡排序(冒泡排序 算法)

// 冒泡排序的方法 static void BubbleSort(int[] arr) { // 获取数组的长度 int len = arr.Length; // 外层循环控...