博客
关于我
排序(插入排序、起泡排序、选择排序和快速排序)
阅读量: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/

    你可能感兴趣的文章
    PowerCreatorCMS UploadResourcePic 任意文件上传漏洞复现
    查看>>
    PowerDesigner 使用的一些技巧(转)
    查看>>
    QGIS在Windows上下载安装与建立空间数据库连接
    查看>>
    PowerDesigner165安装婆姐汉花教程
    查看>>
    PowerDesigner使用教程:设置注释、默认值属性
    查看>>
    PowerDesigner使用教程:不显示背景网格
    查看>>
    PowerDesigner使用教程:创建数据模型以及导出
    查看>>
    PowerDesigner使用教程:右侧工具栏显示/隐藏
    查看>>
    PowerDesigner使用教程:导出sql文件以及解决中文乱码问题
    查看>>
    PowerDesigner使用教程:时间字段设置
    查看>>
    PowerDesigner使用教程:给字段添加唯一约束
    查看>>
    QGIS中怎样设置图层样式并导出地图样式
    查看>>
    PowerDesigner使用笔记
    查看>>
    QGIS中怎样实现数据坐标系转换
    查看>>
    PowerDesigner学习--基本步骤
    查看>>
    PowerDesigner导出Report通用报表
    查看>>
    PowerDesigner教程系列(二)概念数据模型
    查看>>
    Powerdesigner显示表的comment和列的comment的方法
    查看>>
    PowerDesigner最基础的使用方法入门学习
    查看>>
    PowerDesigner版本控制器设置权限
    查看>>