IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 刷题笔记-排序 -> 正文阅读

[数据结构与算法]刷题笔记-排序

在这里插入图片描述

一、交换排序

基本思想:两两比较待排序记录关键字,当两个关键字不满足次序要求时进行交换,直到整个序列满足要求为止。

冒泡排序

两两比较关键字,如逆序则交换顺序,较大关键字逐渐一端移动,直到序列有序。

void bubble_sort(int arr[], int n) {
    for(int i=0; i<n-1; i++) {
        bool flag = true;
        for(int j=0; j<n-i; j++) {
            if(arr[j]>arr[j+1]) {
                flag = false;
                int temp = arr[j+1];
                arr[j+1] = arr[j];
                arr[j] = temp;
            }
        }
        if(flag)
            break;
    }
}

算法特点:
? 1、稳定排序
? 2、可用于链式存储结构
? 3、记录移动次数较多,算法平均性能比直接插入排序差,当初始记录无序时,n较大时,不宜采用

选择排序

基本思想:每一趟排序从待排序的记录中选出关键字最小的记录,按顺序放在已排序的记录中,直到全部排完为止。

//简单选择排序
void select_sort1(int arr[],int n){
    int k;
    for(int i = 0; i < n; i++){
        k = i;
        for(int j = i+1; j < n; j++){
            if(arr[k] > arr[j])
                k = j;
        }
        if(k != i){
            int temp = arr[i]; arr[i] = arr[k]; arr[k] = temp;
        }
    }
}

算法特点:
? 1、算法本身是稳定排序,也可以变成是不稳定排序
? 2、可以用于链式存储结构
? 3、移动次数少,当每一个记录占用的空间较多时,此方法比直接插入排序快。

快速排序

由冒泡排序改进得到,冒泡排序只对相邻两个记录进行比较,因此每次只能消除一个逆序,而快速排序一次交换可消除多个逆序,从而提高排序性能。

int median3(int arr[], int L, int R) {
    int mid = L + (R - L)/2;
    if(arr[L] > arr[mid])
        swap(arr[L], arr[mid]);
    if(arr[L] > arr[R])
        swap(arr[L], arr[R]);
    if(arr[mid] > arr[R])
        swap(arr[mid], arr[R]);
    swap(arr[mid], arr[R - 1]);
    return arr[R - 1];
}

void quicksort(int arr[], int L, int R) {
    if(L > R)
        return;
    // int mid = L + (R-L)/2;
    int pivot = median3(arr, L, R);
    int i = L;
    int j = R-1;
    while(i<j) {
        while(arr[++i] < pivot) {}
        while(arr[--j] > pivot) {}
        if(i < j)
            swap(arr[i], arr[j]);
    }
    swap(arr[i], arr[R-1]);
    quicksort(arr, L, i-1);
    quicksort(arr, i+1, R);
}

void quick_sort(int arr[], int n) {
    quicksort(arr, 0, n-1);
}

算法特点:
? 1、不稳定排序
? 2、适用于顺序结构,很难用于链式结构
? 3、当n较大时,在平均情况下时所有内部排序方法中最快的一种,适用于初始记录无序,n较大的情况

二、插入排序

基本思想:每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置,直到全部待排序全部插入为止。

直接插入排序

排序过程:

  1. 将待排序数组

参考链接:

  1. 9种常用排序算法总结(超详细)
  2. C++ 10种排序算法汇总
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:48:39  更:2022-07-17 16:51:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:49:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码