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

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语言实现基数排序解析及代码示例

    c语言实现基数排序解析及代码示例 前言 基数排序是一种特殊的排序算法,它的时间复杂度为O(dn),其中d表示数据位数,n表示数据个数。它可以用于排序整数、字符串、链表等数据类型。本篇攻略通过讲解基数排序的原理、流程和C语言实现,希望能够帮助大家更好地理解和应用基数排序算法。 基数排序原理 基数排序是一种非比较排序算法,它的实现基于按照键值的每位数字对待排序数…

    算法与数据结构 2023年5月19日
    00
  • input标签内容改变的触发事件介绍

    当用户在表单中输入内容时,网页需要对用户输入进行实时的响应,以方便用户进行修改和确认。而input标签就是常用于表单输入的标签之一,它提供了多种类型的输入框,如文本框、单选框、复选框、下拉框等。在这些输入框中,当其中的内容发生改变时,我们需要将其更新到网页中,这时就需要用到“input标签内容改变的触发事件”。 事件是指在特定的时刻发生的动作或行为,而事件处…

    算法与数据结构 2023年5月19日
    00
  • Go语言展现快速排序算法全过程的思路及代码示例

    这里是关于“Go语言展现快速排序算法全过程的思路及代码示例”的详细攻略。 什么是快速排序算法 快速排序算法是一种基于比较的排序算法,它通过选择一个基准元素,将数组分为两部分然后递归地对这两部分进行排序,最终完成对整个数组的排序。快速排序算法的时间复杂度为 O(nlogn) 平均情况下,但是在最坏情况下会退化为 O(n^2)。 快速排序算法的实现思路 下面是快…

    算法与数据结构 2023年5月19日
    00
  • js实现简单排列组合的方法

    下面是详细讲解 “js实现简单排列组合的方法” 的攻略。 排列组合的概念 排列就是由给定的n个元素中取出m(m ≤ n)个元素的所有排列总数的不同的排列数,用A(n, m)表示。例如,有3个元素A、B、C,则它们的排列有:ABC、ACB、BAC、BCA、CAB、CBA,共6种排列。 组合是指从n个不同元素中,取出m(m≤n)个元素的所有组合情况,用C(n,m…

    算法与数据结构 2023年5月19日
    00
  • C++实现合并排序的方法

    C++ 是一门功能强大的编程语言,提供了多种排序算法来满足不同场景的需要。其中,合并排序是一种常用的高效排序算法,下面我们就来介绍一下 C++ 实现合并排序的方法。 合并排序算法简介 合并排序算法是一种基于归并操作的排序算法,它的基本思想是将一个数组划分为两个子数组,递归地对这两个子数组分别进行排序,然后将排好序的两个子数组合并成一个有序的数组。该算法的时间…

    算法与数据结构 2023年5月19日
    00
  • c++深入浅出讲解堆排序和堆

    C++深入浅出讲解堆排序和堆 堆的定义 堆是一种特殊的树形数据结构,它满足以下两个特性: 堆是一个完全二叉树(Complete Binary Tree); 堆中每个节点的值都大于等于(或小于等于)其左右子节点的值。 可以看出,堆一般分为两种类型:大根堆(Max Heap)和小根堆(Min Heap)。大根堆的每个节点的值都大于等于其左右子节点的值,小根堆则相…

    算法与数据结构 2023年5月19日
    00
  • 希尔排序算法的C语言实现示例

    下面是“希尔排序算法的C语言实现示例”完整攻略。 希尔排序算法简介 希尔排序是通过将整个待排序数组分割成多个子序列,对每个子序列进行插入排序,然后逐步减少子序列长度,最终使整个序列有序的一种算法。 希尔排序算法的流程 按照一定的间隔将待排序数组分成若干个子序列; 对每个子序列进行插入排序,使其中的元素可以快速有序; 缩小排序间隔,重复执行步骤1和2; 直至排…

    算法与数据结构 2023年5月19日
    00
  • JS栈stack类的实现与使用方法示例

    JS栈Stack类的实现与使用方法示例 一、栈的概念 栈(stack)是一种线性数据结构,它有两个主要操作:入栈(push)和出栈(pop)。栈的特点是先进后出(FILO,First In, Last Out)。从数据结构的角度来说,栈是在同一端进行插入和删除操作的一种数据结构。该端被称为栈顶,相对地,把另一端称为栈底。 在计算机科学中,栈具有非常重要的作用…

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