将待续按照某一种规则分为几个子序列 , 不断缩小规则 , 最后用一个直接插入排序合成
空间复杂度为O(1),时间复杂度为O(nlog2n)
算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序 。当增量减到1时,进行直接插入排序后,排序完成 。
package sort.algorithm;
public class ShellSort {
public static void main(String[] args) {
int a[] = { 1, 54, 6, 3, 78, 34, 12, 45, 56, 100 };
double d1 = a.length;
int temp = 0;
while (true)
{
//利用这个在将组内倍数减小
//这里依次为5,3,2,1
d1 = Math.ceil(d1 / 2);
//d为增量每个分组之间索引的增量
int d = (int) d1;
//每个分组内部排序
for (int x = 0; xd; x++)
{
//组内利用直接插入排序
for (int i = x + d; ia.length; i += d) {
int j = i - d;
temp = a[i];
for (; j = 0tempa[j]; j -= d) {
a[j + d] = a[j];
}
a[j + d] = temp;
}
}
if (d == 1)
break;
}
for (int i = 0; ia.length; i++)
System.out.print(a[i]+"");
}
}
五 交换类排序之冒泡排序
交换类排序核心就是每次比较都要进行交换
冒泡排序:是一种交换排序
每一趟比较相邻的元素,较若大小不同则就会发生交换,每一趟排序都能将一个元素放到它最终的位置!每一趟就进行比较 。
时间复杂度O(n2),空间复杂度O(1)
package sort.algorithm;
//冒泡排序:是一种交换排序
public class BubbleSort {
// 按照递增顺序排序
public static void main(String[] args) {
// TODO Auto-generated method stub
int data[] = { 2, 6, 10, 3, 9, 80, 1, 16, 27, 20, 13, 100, 37, 16 };
int temp = 0;
// 排序的比较趟数,每一趟都会将剩余最大数放在最后面
for (int i = 0; idata.length - 1; i++) {
// 每一趟从开始进行比较,将该元素与其余的元素进行比较
for (int j = 0; jdata.length - 1; j++) {
if (data[j]data[j + 1]) {
temp = data[j];
data[j] = data[j + 1];
data[j + 1] = temp;
}
}
}
for (int i = 0; idata.length; i++)
System.out.print(data[i] + " ");
}
}
急求java冒泡排序 快速排序 二分之一查找的代码//标记法
public class Test {
public static void main(String[] args){
int[] array = {9,7,5,8,7,5,3,8,4,2,6,1,0};
for(int i = 0; iarray.length; i++){
int temp = i;
for(int j=i+1; jarray.length; j++){
if(array[temp]array[j]){
temp=j;
}
}
int buff = array[temp];
array[temp] = array[i];
array[i] = buff;
}
for(int a : array){
System.out.println(a);
}
}
}
//二分之一
public class Test {
public void find(int x){
int[] s = {1,2,3,6,7,8,9,12,13,14,15,16,17,18,19,20,23,25,27,30,32,40,50};
int start = 0;
int end = s.length;
int half = end/2;
while(true){
if(s[half]x){
start = half;
half = half + (end-start)/2;
}else if(s[half]x){
end = half;
half = half - (end-start)/2;
}else{
System.out.println(half+1);
break;
}
}
}
public static void main(String[] args){
new Test().find(20);
}
【java快速排序简洁代码 java快速排序简洁代码怎么写】}
哪位帮我讲讲java中的快速排序法快速排序是对冒泡排序的一种改进 。它的基本思想是java快速排序简洁代码:通过一躺排序将要排序的数据分割成独立的两部分java快速排序简洁代码,其中一部分的所有数据都比另外一部分的所有数据都要小java快速排序简洁代码,然后再按次方法对这两部分数据分别进行快速排序java快速排序简洁代码 , 整个排序过程可以递归进行,以此达到整个数据变成有序序列 。最坏情况的时间复杂度为O(n2),最好情况时间复杂度为O(nlog2n) 。
推荐阅读
- 视频号怎么推广小程序的,抖音发视频怎么推广小程序
- 虚拟机cpu超过物理机,虚拟机的cpu数量可以大于物理主机的cpu数量?
- erp系统开发及实施方案,erp系统的开发
- linux命令行到行首 linux到行末
- jquery监听元素创建,jquery监听事件
- css设置li的列表图标样式,css自定义列表符号
- gis中如何统计图斑的中心坐标,gis画图斑
- vb.net考勤管理 利用vba编程统计考勤情况
- 电脑网卡灯亮怎么修复显卡的简单介绍