几种常见的排序算法(插入排序,希尔排序,归并排序和快速排序),算法分析以及改进
来源:互联网 发布:网站用户数据分析 编辑:程序博客网 时间:2024/05/16 10:45
最近刚看完《算法》第四版的第二章,把排序算法都实现了下,总结一下这几种排序算法的优劣,改进方案和应用场景。
插入排序对于部分有序的数组很有效。
插入排序所需的时间取决于输入中元素的初始顺序,对一个很大且其中的元素已经有序(或者接近有序)的数组进行排序将会比对随机顺序的数组或是逆序数组进行排序快得多。
static void exchange(int[] a,int i,int j) {int temp;temp=a[i];a[i]=a[j];a[j]=temp;}public static void main(String []args){int[] a= {1,-1,0,5,4,3};for(int i=1;i<a.length-1;i++)for(int j=i;j>0&&a[j]<a[j-1];j--)exchange(a,j,j-1);for(int i=0;i<a.length-1;i++)System.out.println(a[i]+" ");}
插入排序对于部分有序的数组很有效。
大幅提高插入排序只需要在内循环中将较大的元素都像右移动而不是交换两个元素,这样访问数组的次数就能减半,改进如下:
static void exchange(int[] a, int i, int j) {int temp;temp = a[i];a[i] = a[j];a[j] = temp;}public static void main(String []args){int[] a= {1,-1,0,5,4,3};for(int i=1;i<a.length-1;i++){int temp = a[i]; int j = i; while(j > 0 && temp<a[j-1]) { a[j] = a[j-1]; j--; }a[j] = temp;}for(int i=0;i<a.length-1;i++)System.out.println(a[i]+" ");}
阅读全文
0 0
- 几种常见的排序算法(插入排序,希尔排序,归并排序和快速排序),算法分析以及改进
- 几种常见的排序算法(插入排序,希尔排序,归并排序和快速排序)——希尔排序
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 算法<改进的冒泡排序、直接插入排序、折半插入排序、希尔排序、快速排序、归并排序>
- 常见比较排序算法的实现(归并排序、快速排序、堆排序、选择排序、插入排序、希尔排序)
- 常用的排序算法:插入排序,希尔排序,冒泡排序,选择排序,快速排序,归并排序
- 几种常见的排序算法,选择排序,冒泡排序,希尔排序,堆排序,快速排序,归并排序,基数排序的比较
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 排序算法,插入、快速、希尔、基数、归并排序的代码实现和效率分析
- 基本的排序算法:冒泡排序、插入排序、希尔排序、选择排序、归并排序、快速排序、堆排序
- 七种排序算法,包括:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序
- 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序
- 各种排序算法的场景以及c++实现(插入排序,希尔排序,冒泡排序,快速排序,选择排序,归并排序)
- 数据结构6-排序算法(直接插入排序、希尔排序、快速排序、归并排序和堆排序)
- 排序算法: 冒泡排序, 快速排序,希尔排序,直接插入排序 ,直接选择排序,归并排序,堆排序
- 各种排序算法总结----基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- Zookeeper数据查看工具ZooInspector简介
- 自费出书多少钱?如何出书
- 解决虚拟机出错时,终端内核信息显示不全问题
- oracle11g 修改字符集 修改为ZHS16GBK
- RFID能否在工业制造领域铺开规模
- 几种常见的排序算法(插入排序,希尔排序,归并排序和快速排序),算法分析以及改进
- python编写的adb 脚本 (二)查看系统状态
- Java提高篇——Java 异常处理
- React native的flexbox布局(三)
- 用路由器创建自己的网页之ftp服务器
- 虚拟机不能联网的解决办法(从虚拟机创建到项目运行三)
- Method.invoke与MethodAccess.invoke的区别
- Oracle常用查询表空间的操作
- 超完整的Chrome浏览器客户端调试大全