ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

希尔排序

2022-02-07 19:31:51  阅读:147  来源: 互联网

标签:arr temp int 元素 gap 希尔 排序


思想:

希尔排序把记录按下标的一定增量分组,对每组使用直接排序算法排序;

随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止

 

 

//希尔交换排序
public class ShellSort {
public static void main(String[] args) {
// int[]arr={8,9,1,7,2,3,5,4,6,0};
int[] arr = new int[80000];
for (int i = 0; i < 80000; i++) {
arr[i]=(int)(Math.random()*8000000);
}
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM--dd HH:mm:ss");
String format = simpleDateFormat.format(date);
System.out.println("排序前的时间是:"+format);
shellSort(arr);
Date date1 = new Date();
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM--dd HH:mm:ss");
String format1 = simpleDateFormat.format(date1);
System.out.println("排序前的时间是:"+format1);;
}
public static void shellSort(int[]arr){
int temp=0;
int count=0;
//根据前面的分析,使用循环处理
for (int gap=arr.length/2;gap>0;gap/=2){
//第gap轮排序,将个数据分成了gap组
for (int i = gap; i < arr.length; i++) {
//遍历各组中所有的元素,共gap组,每组两个元素,步长为gap
for (int j = i-gap; j >=0; j-=gap) {
//如果当前元素大于加上步长后的那个元素,说明交换
if (arr[j]>arr[j+gap]){
temp=arr[j];
arr[j]=arr[j+gap];
arr[j+gap]=temp;
}else {
break;
}
}

}
// System.out.println("希尔排序第"+(count++)+"轮\n"+Arrays.toString(arr));
}
/* //第一轮排序,将10个数据分成了5组
for (int i = 5; i < arr.length; i++) {
//遍历各组中所有的元素,共5组,每组两个元素,步长为5
for (int j = i-5; j >=0; j-=5) {
//如果当前元素大于加上步长后的那个元素,说明交换
if (arr[j]>arr[j+5]){
temp=arr[j];
arr[j]=arr[j+5];
arr[j+5]=temp;
}
}

}
System.out.println("希尔排序第一轮\n"+ Arrays.toString(arr));

for (int i = 2; i < arr.length; i++) {
//遍历各组中所有的元素,共2组,每组两个元素,步长为2
for (int j = i-2; j >=0; j-=2) {
//如果当前元素大于加上步长后的那个元素,说明交换
if (arr[j]>arr[j+2]){
temp=arr[j];
arr[j]=arr[j+2];
arr[j+2]=temp;
}
}

}
System.out.println("希尔排序第二轮\n"+ Arrays.toString(arr));

for (int i = 1; i < arr.length; i++) {
//遍历各组中所有的元素,共1组,每组两个元素,步长为1
for (int j = i-1; j >=0; j-=1) {
//如果当前元素大于加上步长后的那个元素,说明交换
if (arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}

}
System.out.println("希尔排序第三轮\n"+ Arrays.toString(arr));*/
}

}

排序前的时间是:2022-02--07 19:19:05
排序前的时间是:2022-02--07 19:19:05

标签:arr,temp,int,元素,gap,希尔,排序
来源: https://www.cnblogs.com/2246781190zyc/p/15868931.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有