排序算法的分类

  1. 插入排序(直接插入排序,折半插入排序,希尔排序)
  2. 交换排序(冒泡排序,快速排序)
  3. 选择排序(直接选择排序,堆排序)
  4. 归并排序
  5. 基数排序

冒泡、直接选择排序、直接插入排序为简单排序。也是最容易掌握和理解的。

  1. 冒泡排序

     1     /**
     2      * 冒泡              O(n^2)
     3      * @param args
     4      */
     5     public static void BubbleSort(int[] args){
     6         int temp=0;
     7             for(int i=0;i<args.length;i++)
     8                 for(int j=0;j+i<args.length-1;j++)
     9                 {
    10                     if(args[j]>args[j+1])
    11                     {
    12                         temp=args[j+1];
    13                         args[j+1]=args[j];
    14                         args[j]=temp;
    15                     }
    16                 }
    17     }

  2. 选择排序
        /*** 选择排序        O(n^2)*/public static void SelectionSort(int[] a){for(int i=0;i<a.length;i++){int k=i;for(int j=i+1;j<a.length;j++){if(a[k]>a[j])k=j;}if(k!=i){int temp=a[k];a[k]=a[i];a[i]=temp;}}}

  3. 插入排序
        /*** 直接插入排序        O(n^2)* 局部有序扩展到全部有序。*/public static void insertionSort(int[] a ){int in,out;   //in为有序区指针变量,out为无序区指针变量for( out=1;out<a.length;out++)        {int temp=a[out];in = out;                //把out所指位置归入到有序区,然后进行有序区排序while(in>0&&temp<a[in-1]){
    //                System.out.println("a[in]:"+a[in]+"---in:"+in);a[in]=a[in-1];--in;}a[in]=temp;
    //            for(int i=0;i<a.length;i++)
    //                System.out.println(+a[i]+"---");}//end ---for        }

  4. 快速排序
        /*** * 划分算法(快速排序的基础)* @param a* @param pivot*/public static int partitionIt(int[] a ,int l,int r,int pivot){int leftPtr,rightPtr,left,right;left=l;      right=r;leftPtr=left-1;            //leftPtr用于最终指向的比pivot大数(包括本身)rightPtr=right;            //rightPtr用于最终指向的比pivot小的数(包括本身)System.out.println("\npivot--->left--->right--->:"+pivot+"--->"+left+"--->"+right);while(true){while(a[++leftPtr] < pivot)                        ;while(rightPtr > left && a[--rightPtr] >pivot);if( rightPtr <= leftPtr )break;else{int temp=a[rightPtr];a[rightPtr]=a[leftPtr];a[leftPtr]=temp;    }}//end while(true)//把枢轴上的数插入到全排序后所对应的位置//(因为leftPtr最终指向是大于枢轴的数(包括本身),交换后则可以保证leftPtr所在位置的右边的数都比枢轴大,左边同理,都比枢轴小,即最终位置就是leftPtr)int temp2=a[leftPtr];a[leftPtr]=pivot;a[right]=temp2;    return leftPtr;}/*** * 快速排序* @param a* @param lp  数组的左边界* @param rp  数组的右边界*/public static void quickSort(int[] a,int lp,int rp){if(lp>=rp)return;else{int pivot=a[rp];        //取最右边的值作为枢轴int partition=partitionIt(a, lp, rp,pivot);quickSort(a,lp,partition-1);quickSort(a,partition+1,rp);}}

转载于:https://www.cnblogs.com/hellocsl/p/3594398.html

常用排序算法及其实现相关推荐

  1. 常用排序算法对比(时间复杂度、稳定性)

    常用排序算法对比

  2. 视觉直观感受7种常用排序算法

    视觉直观感受若干常用排序算法 1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状 ...

  3. C++STL常用排序算法

    C++STL常用排序算法 学习目标 算法简介 sort 功能描述 函数原型 示例 总结 random_shuffle 功能描述 函数原型 示例 总结 merge 功能描述 函数原型 示例 总结 rev ...

  4. java实现apriori算法_七大经典、常用排序算法的原理、Java 实现以及算法分析

    0. 前言 大家好,我是多选参数的程序员,一个正再 neng 操作系统.学数据结构和算法以及 Java 的硬核菜鸡.数据结构和算法是我准备新开的坑,主要是因为自己再这块确实很弱,需要大补(残废了一般) ...

  5. java 性能 排序_Java常用排序算法及性能测试集合

    package algorithm.sort; import java.lang.reflect.Method; import java.util.Arrays; import java.util.D ...

  6. 机器学习(二十二)——推荐算法中的常用排序算法, Tri-training

    推荐算法中的常用排序算法 Pointwise方法 Pranking (NIPS 2002), OAP-BPM (EMCL 2003), Ranking with Large Margin Princi ...

  7. [转载] java实现四种常用排序算法

    参考链接: 用Java排序 四种常用排序算法 ##注:从小到大排 ##冒泡排序## 特点:效率低,实现简单 思想:每一趟将待排序序列中最大元素移到最后,剩下的为新的待排序序列,重复上述步骤直到排完所有 ...

  8. Visual C# 诠释常用排序算法

    Visual C# 诠释常用排序算法 前段时间因为项目需要,做了个用来对数组排序的类,顺便把以前学过的几种排序算法用C#实现一下.用C#的一些机制来诠释了一下算法的是实现.在阅读本之前,需要一些对C# ...

  9. 各种常用排序算法的时间复杂度和空间复杂度

    https://blog.csdn.net/jiajing_guo/article/details/69388331 一.常用排序算法的时间复杂度和空间复杂度表格 二.特点 1.归并排序: (1)n大 ...

  10. Unity3D教程:手游开发常用排序算法 -下

    五.堆排序(Heap Sort) 1. 基本思想: 堆排序是一树形选择排序,在排序过程中,将R[1..N]看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择最小 ...

最新文章

  1. 无需重启, 使用Xephyr调试awesome
  2. python 爬虫实例-Python 爬虫:Scrapy 实例(二)
  3. 《编程珠玑(第2版•修订版)》—第2章2.5节原理
  4. Oracle数据库DBA必备基本技能
  5. RU大神手册上要再“做”的题
  6. php_D3_“简易聊天室 ”实现的关键技术 详解
  7. 带你进入 jBPM 工作流的世界
  8. UVa 220 黑白棋 算法竞赛入门经典 习题4-3
  9. 贷还是不贷:如何用 Python 和机器学习帮你决策?
  10. vue+element 将密码输入框的小圆点显示为星号
  11. Windows10 CUDA11.0安装cudnn8.0.4安装环境配置VS运行及卸载方法
  12. 硬件系统工程师宝典(3)-----信号完整性分析是个啥?
  13. 使用three.js/webgl开发智慧城市场景的一些总结
  14. Unity 给手游用的高性能辉光(Bloom) Shader
  15. 史上最完整的人工智能书单大全
  16. CISSP-D1-安全与风险管理
  17. 基于MiniSTM32的mpu6050学习笔记(一)
  18. First-Blood
  19. 5步加速时间智能分析之 Power BI 篇【附模型下载】
  20. 施耐德 m340 编程手册_施耐德推出开放自动化平台 开启“软件驱动自动化”时代...

热门文章

  1. lambda表达式学习(详细理解 ) 重点在最后
  2. 2021年高考成绩什么时候查询辽宁,2021年辽宁高考成绩什么时候几点可以查
  3. mysql 无法创建用户_mysql不能创建用户
  4. 4核处理器_买电脑选4核、6核还是8核,从业是十年的专家终于讲清楚了差异
  5. php星期和时间获取
  6. php 批量删除挂马文件夹,万能删除服务器被挂马后删不掉的文件夹
  7. 服务器安装系统教程进光盘界面,iso光盘系统怎么安装系统教程
  8. linux精简版远程登录,Linux下如何定制SSH来简化远程访问
  9. python标签打印工具_NiceLabel Designer 2017条码标签打印软件
  10. Android报加密错误,在android中解密使用aes/gcm/nopadding加密的消息时出错