1、插入排序算法

/** Simple insertion sort.* @param a an array of Comparable items.*/public static void insertionSort(Comparable[] a){    for(int p=1; p < a.length ;p++){        Comparable tmp = a[p];//临时变量        int j = p;

        for(; j>0 && tmp.compareTo(a[j-1])< 0; j--)              a[j] = a[j-1];        a[j] = tmp;    }}

时间复杂度是:O(N*N),如果输入被预先排序,运行时间将是O(N)。
算法思路:首先将需要插入排序的元素放入临时变量,然后将所有比它大的元素都向右移动一个位置,最后将临时变量复制进腾出的位置上。

2、快速排序

/**  Quicksort algorithm(driver).*/public static void quicksort( Comparable[] a ){     quicksort(a,0,a.length-1);}/** Internal quicksort method that makes recursive calls.* Uses median-of-three partitioning and a cutoff.* 使用三者取中拆分和小数组截断点的快速排序*/private static void quicksort(Comparable[] a , int low, int high){   if(low + CUTOFF > high )         insertionSort(a,low,high);//测试小数组,当问题小于CUTOFF给出特定值时用插                                   //入排序   else{       //对low, middle, high位置处的元素进行排序,然后将它们放在合适的位置。       int middle = ( low + high )/2;       if(a[middle].compareTo(a[low]) < 0 )           swap(a, low, middle);//交换low与middle的值       if(a[high].compareTo(a[low]) < 0 )           swap(a, low, high);       if(a[high].compareTo(a[middle]) < 0 )           swap(a, middle, high);

       swap(a, middle , high-1);       Comparable pivot = a[high - 1];//支点的设置

       int i,j;       for(i=low, j = high-1; ;){           while( a[++i].compareTo( pivot ) < 0 )             ;           while( pivot.compareTo( a[--j]) < 0 )             ;           if( i >= j)              break;           swap(a, i , j);       } 

       swap(a, i ,high-1);//确定支点的位置

       quicksort(a, low, i-1);       quicksort(a, i+1, high);   }}

平均时间复杂度为O(N logN)

常用排序算法-java实现(插入,快排)相关推荐

  1. 常用排序算法-----------JAVA实现

    #常用排序算法-插入排序,选择排序,交换排序,归并排序,基数排序 ###排序算法可归类为以下几类: 插入排序: 直接插入排序(DirectInsertSort): 二分法排序(BinarySort): ...

  2. 八大排序算法之快速排序(下篇)(快排的优化+非递归快排的实现)

    目录 一.前言 1.快速排序的实现: 快速排序的单趟排序(排升序)(快慢指针法实现):​ 2.未经优化的快排的缺陷 二.快速排序的优化 1.三数取中优化 优化思路: 2. 小区间插入排序优化 小区间插 ...

  3. (十)更快的排序算法(归并、快排、基数)

    目标 1) 使用下列方法将一个数组按升序排序:归并排序.快速排序和基数排序 2) 评估排序的效率,讨论不同的方法的相对效率 目录 9.1 归并排序 9.1.1 归并数组 9.1.2 递归归并排序 9. ...

  4. 排序算法:冒泡和快排 摘自网络

    冒泡排序: 首先我们自己来设计一下"冒泡排序",这种排序很现实的例子就是: 我抓一把沙仍进水里,那么沙子会立马沉入水底, 沙子上的灰尘会因为惯性暂时沉入水底,但是又会立马像气泡一样 ...

  5. 常用排序算法-java实现(希尔,归并)

    3.希尔排序 /** Shellsort, using a sequence suggested by Gonnet.* @param a an array of Comparable items.* ...

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

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

  7. 用c语言编写插入排序算法,C语言实现常用排序算法——插入排序

    插入排序是最基础的排序算法,原理: 首先1个元素肯定是有序的,所以插入排序从第二个元素开始遍历: 内循环首先请求一个空间保存待插入元素,从当前元素向数组起始位置反向遍历: 当发现有大于待插入元素的元素 ...

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

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

  9. 我们一起来排序——使用Java语言优雅地实现常用排序算法

    破阵子·春景 燕子来时新社,梨花落后清明. 池上碧苔三四点,叶底黄鹂一两声.日长飞絮轻. 巧笑同桌伙伴,上学径里逢迎. 疑怪昨宵春梦好,元是今朝Offer拿.笑从双脸生. 排序算法--最基础的算法,互 ...

最新文章

  1. laytpl语法_layui语法基础
  2. 实现一个简单的WebSocket聊天室
  3. mysql导出txt到client_mysql导出导入txt以及sftp自动下载(一)
  4. Android ViewPager + Fragment的布局
  5. microsoftstore连不上网_win10系统下微软商店连不了网如何解决
  6. 用迅雷或者IDM下载下载百度网盘文件方法
  7. 美团实习经验(基础架构部)
  8. 计算机炫酷功能,【实用】上班族必备!10个实用电脑炫酷小技巧~
  9. python内置函数用来返回列表、元组、字典_python程序设计第一章基础知识 题库及选解...
  10. 虚拟化最大的市场将出现在3G手机领域
  11. Centos7 配置netatalk搭建mac Time Machine
  12. python变量命名为什么不能以数字开头
  13. 老师讲,这是个hin重要的C语言习题
  14. 买拍参考贴中羽主力拍统计
  15. 客快物流大数据项目(八十五):实时OLAP分析需求
  16. 计算机二级Java-综合应用题-(极速倍斩第2版-B1)
  17. 编写Python语言,使用循环求解1到100之间数的偶数和
  18. 7-10 小字辈 (25分)
  19. 3.16下午 阅读P12P18核心词汇 视频阅读王希伟5.12完
  20. 利用二维数组(double[])实现一个矩阵类:Matrix。要求提供以下方法:(1)set(int row, int col, double value):将第row行第col列的元素赋值为valu

热门文章

  1. JavaWeb之Servlet:Cookie 和 Session
  2. redis 配置文件翻译
  3. JavaScript保留关键字及危险变量名
  4. A - Divisors POJ - 2992 (组合数C的因子数)数学—大数
  5. 7.让网站支持http和https的访问方式
  6. 如何做实时监控?—— 参考 Spring Boot 实现
  7. js中substr,substring,indexOf,lastIndexOf,split 的用法
  8. 移动端webapp开发基础
  9. 《网络基础》- 第3集-IP地址、子网掩码和路由器的作用
  10. Iphone获取本地ip地址