zoukankan      html  css  js  c++  java
  • 希尔排序(java)

    时间复杂度为O( n^(3/2) )
    不是一个稳定的排序算法

    如何看一个算法是否稳定:
    {("scala",12),("python",34),("c++",12),("c",76),("java",44)}
    scala和c++的值相等,排序前scala在c++的前面

    如果排序后
    {("scala",12),("c++",12),("python",34),("java",44),("c",76)}//scala还是在c++的前面,稳定
    {("c++",12),("scala",12),("python",34),("java",44),("c",76)}//scala在c++的后面,不稳定

    package com.sort.shell;
    public class ShellSort { public static void swap(int[] list, int a, int b){ int temp; temp = list[a]; list[a] = list[b]; list[b] = temp; } public static void print(int list[]){ for(int i=0; i<list.length; i++){ System.out.print(" "+list[i]); } } /** * {0,9,1,5,8,3,7,4,6,2} * * int increment = L.length-1; * 设置一个增量increment * increment = increment/3+1; * increment=4 * i=5 , 从5号到9号遍历 * 让1号和5号比较,如果1号大于5号,就交换位置 * 2号和6号比较,如果2号不大于6号,就不动 * 3号和7号比较、(3-4)!> 0,结束 * 4号和8号比较 (4-4)!> 0,结束 * 5号和9号比较,发现(5-4=1)>0,就让1号和5号比较,(1-4)!>0,结束 * * increment = increment/3+1; * increment=2 * i=3,从3号到9号遍历 * 1号和3号比较(1-3)!> 0,结束 * 2号和4号比较 * 3号和5号比较,1号和3号比较 * 4号和6号比较,2号和4号比较 * 5号和7号比较,3号和5号比较,1号和3号比较 * 6号和8号比较,4号和6号比较,2号和4号比较 * 7号和9号比较,5号和7号比较,3号和5号比较,1号和3号比较 * * increment = increment/3+1; * increment = 1 * 2号到9号遍历 * 2号和1号比较 * 3号和2号比较 * ....... * * */ public static void shellSort(int[] L){ int i,j; int increment = L.length-1; do{ increment = increment/3+1; //增量序列 for(i=increment+1; i<=L.length-1; i++){ if(L[i] < L[i-increment]){ L[0] = L[i]; // 暂存在L[0] for(j=i-increment; j>0 && L[0]<L[j]; j-=increment){ L[j+increment] = L[j]; //记录后移,查找插入位置 } L[j+increment] = L[0]; //插入 } } }while(increment > 1); } public static void sort(int[] list){ //前奏工作 int [] L = new int[list.length+1]; L[0] = 0; // 让0号元素为作为暂存数据的位置 for(int i=1; i<L.length; i++){ L[i] = list[i-1]; } shellSort(L);//进行希尔排序 //收尾工作 for(int i=1; i<L.length; i++){ list[i-1] = L[i]; } } public static void main(String[] args) { int [] list = new int[]{9,1,5,8,3,7,4,6,2}; print(list); System.out.println(); sort(list); print(list); } }
  • 相关阅读:
    架构设计:系统存储(10)——MySQL简单主从方案及暴露的问题
    西安大唐提车游记——感受古都容颜
    架构设计:系统存储(9)——MySQL数据库性能优化(5)
    架构设计:系统存储(8)——MySQL数据库性能优化(4)
    架构设计:系统存储(7)——MySQL数据库性能优化(3)
    架构设计:系统存储(6)——MySQL数据库性能优化(2)
    全班成绩录入系统
    直接选择排序
    冒泡排序
    直接插入排序
  • 原文地址:https://www.cnblogs.com/wwzyy/p/6219104.html
Copyright © 2011-2022 走看看