博客
关于我
排序(插入排序、起泡排序、选择排序和快速排序)
阅读量:563 次
发布时间:2019-03-09

本文共 2617 字,大约阅读时间需要 8 分钟。

排序

一、二、插入排序

插入排序是一种简单而有效的排序算法,其思想是将一条记录插入到已排序的表中,使之保持有序。

1. 直接插入排序

直接插入排序是一种最常用的插入排序方法。

算法思想:逐步将记录插入到已排好序的有序表中。

实现代码

void InsertSort(int a[], int n) {    int i, j, t;    // 从第二个元素开始插入    for (i = 2; i <= n; i++) {        // 插入的位置        if (a[i-1] > a[i]) {            // 交换中间变量            t = a[i];            // 将要插入的元素向左移动            for (j = i-1; a[j] > t; j--) {                a[j+1] = a[j];            }            a[j+1] = t;        }    }}

2. 折半插入排序

与直接插入排序相比,折半插入排序在插入位置的选择上更优。

算法思想:采用折半查找法确定插入位置。

实现代码

void BInsertSort(int a[], int n) {    int i, j, t;    int low, high, mid;    // 控制循环的趟数,每一趟采用折半查找    for (i = 2; i <= n; i++) {        a[0] = a[i];        low = 1;        high = i - 1;        while (low <= high) {            mid = (low + high) / 2;            if (a[mid] >= a[0]) {                high = mid - 1;            } else {                low = mid + 1;            }        }        // 移动记录到正确位置        for (j = i-1; j >= high + 1; j--) {            a[j+1] = a[j];        }        a[high+1] = a[0];    }}

二、起泡排序

起泡排序是一种简单的稳定排序算法,逐步将较大的元素“冒泡”到已排序的位置。

算法思想:从前向后依次检查每一对相邻元素,发现逆序后交换位置。

实现代码

void BubSort(int a[], int n) {    int i, j, t;    // 控制循环的趟数    for (i = 1; i < n; i++) {        // 配对检查的范围逐渐缩小        for (j = 1; j <= n - i; j++) {            if (a[j] > a[j+1]) {                t = a[j];                a[j] = a[j+1];                a[j+1] = t;            }        }    }}

三、快速排序

快速排序是一种高效的分治排序算法,通过一次排序将记录分割成两部分。

算法思想:选择一个记录作为枢轴,将数组划分为两部分,分别对每一部分递归排序。

实现代码

// 第一趟排序int Partition(int a[], int low, int high) {    int pkey = a[low];    while (low < high) {        while (a[high] >= pkey && low < high) {            high--;        }        a[low] = a[high];        while (a[low] < pkey && low < high) {            low++;        }        a[high] = a[low];    }    a[low] = pkey;    return low;}// 递归排序void QSort(int a[], int low, int high) {    if (low < high) {        int mid = Partition(a, low, high);        QSort(a, low, mid - 1);        QSort(a, mid + 1, high);    }}// 适用于数组从索引1开始void QuickSort(int a[], int n) {    QSort(a, 1, n);}

四、简单选择排序

简单选择排序是一种稳定排序算法,通过每次选取最小记录来逐步建立排序。

算法思想

  • 第一趟:从n个记录中选择一个最小记录交换到第一个位置。
  • 第二趟:从剩下n-1个记录中选择一个最小记录交换到第二个位置。
  • 第三趟:依次类推,直到所有记录排好序。
  • 实现代码

    void SelectSort(int a[], int n) {    int i, j;    int min, t;    // 第一趟:找最小值放第一位    for (i = 1; i < n; i++) {        min = a[i];        for (j = i+1; j < n; j++) {            if (a[j] < min) {                min = a[j];            }        }        for (j = i+1; j >= (a[i] = min); j--) {            t = a[j];            a[j] = a[j-1];            a[j-1] = t;        }    }}

    通过以上各算法的理解和实现,可以方便地对不同数据量和规模的数据进行排序处理。

    转载地址:http://vytpz.baihongyu.com/

    你可能感兴趣的文章
    No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
    查看>>
    No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
    查看>>
    No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
    查看>>
    No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
    查看>>
    No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
    查看>>
    No module named 'crispy_forms'等使用pycharm开发
    查看>>
    No module named cv2
    查看>>
    No module named tensorboard.main在安装tensorboardX的时候遇到的问题
    查看>>
    No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
    查看>>
    No new migrations found. Your system is up-to-date.
    查看>>
    No qualifying bean of type XXX found for dependency XXX.
    查看>>
    No resource identifier found for attribute 'srcCompat' in package的解决办法
    查看>>
    no session found for current thread
    查看>>
    No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
    查看>>
    NO.23 ZenTaoPHP目录结构
    查看>>
    NO32 网络层次及OSI7层模型--TCP三次握手四次断开--子网划分
    查看>>
    NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
    查看>>
    Node JS: < 一> 初识Node JS
    查看>>
    Node-RED中使用JSON数据建立web网站
    查看>>
    Node-RED中使用json节点解析JSON数据
    查看>>