希尔排序
Posted 512178509
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了希尔排序相关的知识,希望对你有一定的参考价值。
package com.fh.sort; /** * @author * * @create 2018-03-06 下午10:22 **/ public class Sort { public static void main(String[] args){ Sort sort=new Sort(); // sort.quickSort(); // sort.xRSort(); // sort.simpleSort(); sort.bubbleSort(); } /** * 插入排序-直接插入排序 *基本思想:将一个记录插入到已经排序好的有序表中,从而达到一个新的,记录数加1的有序表 * 先将序列的第一个记录看成有序的自序列,然后从第二个序列逐个插入到序列中,直到整个序列有序 */ public void quickSort(){ int[] array={12,23,35,67,89}; int len=array.length; for (int i=1;i<len;i++){ int courrentData=array[i];//需要插入的数据 int a=i-1;//有序数据 while(a>0&&courrentData<array[a]){//比较,循环比较数据,当数组中的数据大于当前数据时 array[a+1]=array[a];//进行数据的移动, a--; } array[a+1]=courrentData;//赋值 } for (int a:array ) { System.out.println("\n"+a); } } /** * 希尔排序--处理大数据量 * 将数组的个数设置为n,k=n/2,将下标差距为k的划分为一组,构成有序序列 * 在取k=k/2,将下标值为k的构成一组有序序列 */ public void xRSort(){ int[] array={12,23,34,45,56,78,34,56,12,78,99}; int b=array.length; while (b!=0){ b=b/2; for (int x=0;x<b;x++){//分组的个数 for (int i=x+b;i<array.length;i+=b){//组内的元素 int courrent=array[i];//直接插入排序的东西 int j=i-b; while (j>0&&courrent<array[j]){ array[j+b]=array[j]; j=j-b; } array[j+b]=courrent; } } } for (int c:array ) { System.out.println("\n"+c); } } /** * 简单选择排序 * 如果每次比较都交换,就是交换排序,如果循环结束在交换,就是简单选择排序 * 遍历最小的数,将最小的数放到最前面 * 遍历之后的数,将最小的数放到最前面 * 重复之前的过程 */ public void simpleSort(){ int[] array={12,32,22,45,67,89,9,2,23,34}; int length=array.length; for (int i=0;i<length;i++){ int key=array[i]; int position=i; for (int j=i+1;j<length;j++){ if(array[j]<key){ key=array[j]; position=j; } } array[position]=array[i]; array[i]=key; } for (int a:array ) { System.out.println("\n"+a); } } /** * 冒泡排序 * 将序列中的元素进行两两进行比较,最大的放到最后面的 * 将剩下的元素进行比较,将最大的放到最后面 */ public void bubbleSort() { int[] array = {12, 23, 34, 12, 45, 23, 34, 2, 67, 9}; int length = array.length; int tem; for (int i = 0; i < length; i++) { for (int j = 0; j < length - i - 1; j++) {//需要-1,不然后续的j+1会下标越界 if (array[j] > array[j + 1]) {//如果前一个数据大于后一个数据,进行数据数据交换 tem = array[j]; array[j] = array[j + 1]; array[j + 1] = tem; } } } for (int a : array ) { System.out.println("\n" + a); } } /** * 快速排序 * 选择第一个数为p,小于p的数放到左边,大于p的数放到右边 */ public void quickSorts(){ } /** * 归并排序 * 选择相邻两个数组成有序序列 * 选择两个有序序列组组成有序序列 * 重复上面的步骤 */ public void gBSorts(){ } /** *基数排序 * 将数组的各位数取出,按照各位数进行排序,构成有序序列 * 将构成好的有序序列取出十位数,进行排序 */ public void jsSorts(){ } }
以上是关于希尔排序的主要内容,如果未能解决你的问题,请参考以下文章