B站学习传送门–>尚硅谷Java数据结构与java算法(Java数据结构与算法)


写在前面
数组结构可视化在线网站地址 ===>数据结构可视化在线

排序算法: 把一组数据,依指定顺序进行排列的过程.

在这里插入图片描述

ml

    • 1.时间复杂度概述
      • 时间频度
      • 时间复杂度
      • 平均&最差时间复杂度
    • 2.冒泡排序
      • 稍微优化一下
    • 3.简单选择排序
      • 稍微优化一下
    • 4.直接插入排序
      • 稍微优化一下
    • 5. 希尔排序
      • 交换式 实现
      • 移位方式 实现
    • 6.快速排序
    • 7.归并排序
    • 8.基数排序
      • 稍微优化一下

1.时间复杂度概述

时间频度

时间频度(T(n)) 算法中语句的执行次数

案例
时间频度为 (n+1);
这里的n就是100;
加1是因为最后在循环时还要再判断一次;

public class Demo01 {public static void main(String[] args) {int total = 0;int end = 100;for (int i = 1; i <= end; i++) {total +=i;}System.out.println(total);//5050}
}

但是若直接简化写为;
时间频度就变成 1 ;因为仅执行一次

public class Demo01 {public static void main(String[] args) {int total = 0;int end = 100;total =(end +1 )* end/2;System.out.println(total);//5050}
}

实际上,常数项可以忽略

在这里插入图片描述

低阶的次数项也可以忽略

在这里插入图片描述

在同等次方的条件下,和次方项前面的系数有关系;去掉系数后;这个就接近了

在这里插入图片描述

时间复杂度

在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f (n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。

时间频度不同,时间复杂度可能相同
例: T(n) = n² + 6n+2 与 T(n) = 2n² + 5n+2
时间复杂度都可写为 O(n²)

Ο(1)<Ο(log₂n)<Ο(n)<Ο(nlog₂n)<Ο(n²)<Ο(n³)< Ο(n^k) <Ο(2ⁿ)
时间复杂度增大,效率变低

在这里插入图片描述

常数阶 Ο(1):
只要里面没有循环之类的复杂运算,代码再多也都是O(1)常数阶;
不会因为某个变量的增加而增加消耗的时间

对数阶: Ο(log₂n)
案例:比如说要计算下面这个循环次数;
在while循环内;每次都给 i *2 ;条件是i<1024;
1024 = 2^10; 即 n = 2^10; 那么对应的就是 log₂n = 10; 执行的次数为10次;
即时间复杂度为对数阶O(log₂n);
当然,这个根据实际情况会发生改变; 若 在循环中变为 i = i * 5 ;那么时间复杂度也就是O(log5n)

public class Demo02 {public static void main(String[] args) {int i = 1;int n =1024;//num:用来计数int num = 0;while (i<n){i = i * 2 ;num++;}System.out.println("执行次数->"+num); //执行次数->10}
}

线性阶:O(n)
单层循环的话,按照循环的规模来决定; 时间复杂度就是O(n)
案例;它的执行次数为 T(n) = n +1 ;
忽略掉常数项 ; 时间复杂度其实就是O(n);
在本案例中循环的规模n=10;那么它时间复杂度为O(10);
当n变为20时,它也就是O(20);总的来说,时间复杂度就是线性阶的O(n)

public class Demo03 {public static void main(String[] args) {int w =0;int num = 0;int n =10;for (int i = 0; i <= n ; i++) {w = num;num ++;}System.out.println(w);  // 10 System.out.println("执行次数->"+num);//执行次数->11}
}

线性对数阶Ο(nlog₂n)
实际上就是让时间复杂度为O(log₂n)的再循环n次
案例;这里执行次数就是 T(n) = (n+1) * (log₂n)

public class Demo04 {public static void main(String[] args) {int n =1024;int i ;//num:用来计数int num = 0;for (int m = 0; m <= n; m++) {i =1;while (i<n){i = i * 2 ;num++;}}System.out.println("执行次数->"+num); //执行次数->10250  (1024+1) * 10}
}

平方阶Ο(n²)
实际就是把时间复杂度为O(n)的再嵌套一层循环;即双层循环;也可写作O( m* n)
案例

public class Demo05 {public static void main(String[] args) {int w =0;int num = 0;int m =10;int n =10;for (int i = 1; i <= m ; i++) {for (int j = 1; j <= n; j++) {w = num;num ++;}}System.out.println(w);  // 99System.out.println("执行次数->"+num);//执行次数->100}
}

平均&最差时间复杂度

在这里插入图片描述

2.冒泡排序

按照提前设定的规则 (由小到大 / 由大到小) ;比较前后两个相邻元素的大小;若逆序了,就发生交换;

例如需要完成由小到大冒泡排序:29,10,14,37,14,3
图示:–>

在这里插入图片描述

初始的理解过程

总共经过数组的(长度-1)次大的交换过程;即 5 次;
其实每次大的排序结束后就有一个最大的值固定下来了;所以循环次数会比上一次的少一次
(1)
10 -> 29 -> 14 -> 37 -> 14 -> 3
10 -> 14 -> 29 -> 37 -> 14 -> 3
10 -> 14 -> 29 -> 37 -> 14 -> 3
10 -> 14 -> 29 -> 14 -> 37 -> 3
10 -> 14 -> 29 -> 14 -> 3 -> 37
(2)
10 -> 14 -> 29 -> 14 -> 3 -> 37
10 -> 14 -> 29 -> 14 -> 3 -> 37
10 -> 14 -> 14 -> 29 -> 3 -> 37
10 -> 14 -> 14 -> 3 -> 29 -> 37
(3)
10 -> 14 -> 14 -> 3 -> 29 -> 37
10 -> 14 -> 14 -> 3 -> 29 -> 37
10 -> 14 -> 3 -> 14 -> 29 -> 37
(4)
10 -> 14 -> 3 -> 14 -> 29 -> 37
10 -> 3 -> 14 -> 14 -> 29 -> 37
(5)
3 -> 10 -> 14 -> 14 -> 29 -> 37

分步骤写法;

这里分步骤展示排序过程

public class BubbleSortTest2 {public static void main(String[] args) {//需要排序的数组int[] array = {29,10,14,37,14,3};//临时变量,用于前后交换时临时存储;int temp = 0;//1.第一次排序;for (int i = 0; i < array.length - 1; i++) {if(array[i] > array[i+1]){temp = array[i];array[i] = array[i+1];array[i+1] =temp;}}System.out.println("第一次排序后-->"+ Arrays.toString(array));//第一次排序后-->[10, 14, 29, 14, 3, 37]//2.第二次排序;for (int i = 0; i < array.length - 1 - 1; i++) {if(array[i] > array[i+1]){temp = array[i];array[i] = array[i+1];array[i+1] =temp;}}System.out.println("第二次排序后-->"+ Arrays.toString(array));//第二次排序后-->[10, 14, 14, 3, 29, 37]//3.第三次排序for (int i = 0; i < array.length - 1 - 1 - 1; i++) {if(array[i] > array[i+1]){temp = array[i];array[i] = array[i+1];array[i+1] =temp;}}System.out.println("第三次排序后-->"+ Arrays.toString(array));//第三次排序后-->[10, 14, 3, 14, 29, 37]//4.第四次排序;for (int i = 0; i < array.length - 1 - 1 -1; i++) {if(array[i] > array[i+1]){temp = array[i];array[i] = array[i+1];array[i+1] =temp;}}System.out.println("第四次排序后-->"+ Arrays.toString(array));//第四次排序后-->[10, 3, 14, 14, 29, 37]//5.第五次排序;for (int i = 0; i < array.length - 1 - 1 -1; i++) {if(array[i] > array[i+1]){temp = array[i];array[i] = array[i+1];array[i+1] =temp;}}System.out.println("第五次排序后-->"+ Arrays.toString(array));//第五次排序后-->[3, 10, 14, 14, 29, 37]}
}

综合写法

public class BubbleSortTest {public static void main(String[] args) {//需要排序的数组int[] array = {29,10,14,37,14,3};//调用方法; 完成由大到小排序int[] sortArray = BubbleSort(array);System.out.println("冒泡排序结果-->"+Arrays.toString(sortArray));//冒泡排序结果-->[3, 10, 14, 14, 29, 37]}public static int[] BubbleSort(int[] array){for (int i = 0; i <array.length -1; i++) {for (int j = 0; j < array.length - i - 1; j++) {//后一个和之前的交换;if(array[j] > array[j+1]){int temp = array[j];array[j] = array[j+1];array[j+1] = temp;}}System.out.println("第"+(i+1)+"次排序后-->"+Arrays.toString(array));}return array;}
}

运行结果

1次排序后-->[10, 14, 29, 14, 3, 37]2次排序后-->[10, 14, 14, 3, 29, 37]3次排序后-->[10, 14, 3, 14, 29, 37]4次排序后-->[10, 3, 14, 14, 29, 37]5次排序后-->[3, 10, 14, 14, 29, 37]
冒泡排序结果-->[3, 10, 14, 14, 29, 37]

稍微优化一下

如果说,我这个数组比较特殊;
例如:3,2,14,37,14,3
看看它的执行步骤;会发现其实第三次它就排序完成了;但还进行了后面的无意义排序;

1次排序后-->[2, 3, 14, 14, 3, 37]2次排序后-->[2, 3, 14, 3, 14, 37]3次排序后-->[2, 3, 3, 14, 14, 37]4次排序后-->[2, 3, 3, 14, 14, 37]5次排序后-->[2, 3, 3, 14, 14, 37]
冒泡排序结果-->[2, 3, 3, 14, 14, 37]

那么,就对之前的冒泡排序优化一下;
在执行时加入标志位的判断;

public class BubbleSortTest3 {public static void main(String[] args) {//需要排序的数组int[] array = {3,2,14,37,14,3};//调用方法; 完成由大到小排序int[] sortArray = BubbleSort(array);System.out.println("冒泡排序结果-->"+Arrays.toString(sortArray));}public static int[] BubbleSort(int[] array){//定义标志位;boolean flag =false;for (int i = 0; i <array.length -1; i++) {for (int j = 0; j < array.length - i - 1; j++) {//后一个和之前的交换;if(array[j] > array[j+1]){flag = true;int temp = array[j];array[j] = array[j+1];array[j+1] = temp;}}//对标志位判断后再决定是否继续循环;if(flag){//重置标志位;flag = false;}else {//表示没发生交换;跳过本次循环;break;}System.out.println("第"+(i+1)+"次排序后-->"+Arrays.toString(array));}return array;}
}

看看执行过程

1次排序后-->[2, 3, 14, 14, 3, 37]2次排序后-->[2, 3, 14, 3, 14, 37]3次排序后-->[2, 3, 3, 14, 14, 37]
冒泡排序结果-->[2, 3, 3, 14, 14, 37]

3.简单选择排序

比如说要定义由小到大的排序;
首先假设数组的第一个数是最小的数;去依次和后面的数进行比较,直到找到一个比它小的,然后将那个数标记为最小的数,接着继续依次比较;直到数组遍历结束;将带有标记的最小数字和第一个数交换;
这时,第一个数的位置就定下来了;接着开始假设第二个数为最小的数,重复之前的步骤…直到完成排序;

就用案例
8 -> 3 -> 2 -> 1 -> 7 -> 4 -> 6 -> 5来看了

图示过程–>

在这里插入图片描述

这七次排序的分解过程;

初始 =====>8 -> 3 -> 2 -> 1 -> 7 -> 4 -> 6 -> 5
(1)
1 -> 3 -> 2 -> 8 -> 7 -> 4 -> 6 -> 5
(2)
1 -> 2 -> 3 -> 8 -> 7 -> 4 -> 6 -> 5
(3)
1 -> 2 -> 3 -> 8 -> 7 -> 4 -> 6 -> 5
(4)
1 -> 2 -> 3 -> 4 -> 7 -> 8 -> 6 -> 5
(5)
1 -> 2 -> 3 -> 4 -> 5 -> 8 -> 6 -> 7
(6)
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 8 -> 7
(7)
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8

首先是分步骤实现的方式

public class SelectSortTest {public static void main(String[] args) {//需要排序的数组;int[] array = {8, 3, 2, 1, 7, 4, 6, 5};System.out.println("选择排序之前-->   "+Arrays.toString(array));//--------------------- ( 1 )----------------------------------------//定义最小值的索引,以及最小值;int minIndex = 0;int minVal = array[0];//1.第一次排序;for (int i = 0+1; i < array.length ; i++) {//若比较,找到比这个最小值还小的数;就把那个数标记为最小值;if(minVal > array[i]){minIndex = i;minVal =array[i];}}//结束后,再交换;array[minIndex] = array[0];array[0] = minVal;System.out.println("第一次排序结束后-->"+Arrays.toString(array));//-----------------------( 2 )--------------------------------------//最小值以及索引重置;minIndex = 1;minVal = array[1];//2.第二次排序;for (int i = 1+1; i < array.length ; i++) {//若比较,找到比这个最小值还小的数;就把那个数标记为最小值;if(minVal > array[i]){minIndex = i;minVal =array[i];}}//结束后,再交换;array[minIndex] = array[1];array[1] = minVal;System.out.println("第二次排序结束后-->"+Arrays.toString(array));//------------------------( 3 )-------------------------------------//最小值以及索引重置;minIndex = 2;minVal = array[2];//3.第三次排序;for (int i = 1+1+1; i < array.length ; i++) {//若比较,找到比这个最小值还小的数;就把那个数标记为最小值;if(minVal > array[i]){minIndex = i;minVal =array[i];}}//结束后,再交换;array[minIndex] = array[2];array[2] = minVal;System.out.println("第三次排序结束后-->"+Arrays.toString(array));//------------------------( 4 )-------------------------------------//最小值以及索引重置;minIndex = 3;minVal = array[3];//4.第四次排序;for (int i = 1+1+1+1; i < array.length ; i++) {//若比较,找到比这个最小值还小的数;就把那个数标记为最小值;if(minVal > array[i]){minIndex = i;minVal =array[i];}}//结束后,再交换;array[minIndex] = array[3];array[3] = minVal;System.out.println("第四次排序结束后-->"+Arrays.toString(array));//-------------------------( 5 )------------------------------------//最小值以及索引重置;minIndex = 4;minVal = array[4];//5.第五次排序;for (int i = 1+1+1+1+1; i < array.length ; i++) {//若比较,找到比这个最小值还小的数;就把那个数标记为最小值;if(minVal > array[i]){minIndex = i;minVal =array[i];}}//结束后,再交换;array[minIndex] = array[4];array[4] = minVal;System.out.println("第五次排序结束后-->"+Arrays.toString(array));//--------------------------( 6 )-----------------------------------//最小值以及索引重置;minIndex = 5;minVal = array[5];//6.第六次排序;for (int i = 1+1+1+1+1+1; i < array.length ; i++) {//若比较,找到比这个最小值还小的数;就把那个数标记为最小值;if(minVal > array[i]){minIndex = i;minVal =array[i];}}//结束后,再交换;array[minIndex] = array[5];array[5] = minVal;System.out.println("第六次排序结束后-->"+Arrays.toString(array));//---------------------------( 7 )----------------------------------//最小值以及索引重置;minIndex = 6;minVal = array[6];//7.第七次排序;for (int i = 1+1+1+1+1+1+1; i < array.length ; i++) {//若比较,找到比这个最小值还小的数;就把那个数标记为最小值;if(minVal > array[i]){minIndex = i;minVal =array[i];}}//结束后,再交换;array[minIndex] = array[6];array[6] = minVal;System.out.println("第七次排序结束后-->"+Arrays.toString(array));}
}

结果过程

选择排序之前-->   [8, 3, 2, 1, 7, 4, 6, 5]
第一次排序结束后-->[1, 3, 2, 8, 7, 4, 6, 5]
第二次排序结束后-->[1, 2, 3, 8, 7, 4, 6, 5]
第三次排序结束后-->[1, 2, 3, 8, 7, 4, 6, 5]
第四次排序结束后-->[1, 2, 3, 4, 7, 8, 6, 5]
第五次排序结束后-->[1, 2, 3, 4, 5, 8, 6, 7]
第六次排序结束后-->[1, 2, 3, 4, 5, 6, 8, 7]
第七次排序结束后-->[1, 2, 3, 4, 5, 6, 7, 8]

稍微优化一下

public class SelectSortTest01 {public static void main(String[] args) {//需要排序的数组;int[] array = {8, 3, 2, 1, 7, 4, 6, 5};int[] result = SelectSort(array);System.out.println("选择排序结束后的-->"+Arrays.toString(result));//选择排序结束后的-->[1, 2, 3, 4, 5, 6, 7, 8]}//选择排序的方法;public static int[] SelectSort(int[] array) {for (int i = 0; i < array.length - 1; i++) {//定义最小值的索引,最小值; 先假设当前的数为最小的;int minIndex = i;int minVal = array[i];for (int j = i + 1; j < array.length; j++) {//比较最小值和其他的数;if (minVal > array[j]) {//仅标记最小值,以及得到它的索引;minVal = array[j];minIndex = j;}}//若最小值不是假设的那个;if (minIndex != i) {//交换最小值;array[minIndex] = array[i];array[i] = minVal;}}return array;}
}

4.直接插入排序

首先假设第一个元素是已经排序好的有序表,后面的元素都是无序的;
然后从第二个元素开始; 和前面的第一个有序表元素比较,放入合适的位置;
然后这时前两个元素形成有序表,后面的是无序的;
然后这时把第三个元素获取到,和前面的有序表(已经有两个元素了)比较;放入合适的位置;
… 以此类推;直到将所有的元素排序完毕.

例如;要对16 - >3 -> 12 -> 1 -> 30 -> 6 进行插入排序
图解–>

在这里插入图片描述

  • 首先明确,待插入的数是从第2个数开始的;也就是数组下标索引 为 1的数;
  • 那么,先把待插入的数值存起来;然后他要插入,首先找的是前面有序表的最后一个;也就是这个待插入数值的下标的前一个;
  • 若这个待插入的数值比前面的有序表最后一个数还大,那么直接把它放在有序表的最后一个位置;
  • 然后,它如果比前面的有序表最后一个还小,就说明它要放入前面的表里面;那么首先让前面的挪一个位置出来,放到这个待插入的数的原来位置;
  • 注意这个待插入数的值已经提前被取出来了,那么它在有序表中找位置,还是一样的,和前面的比较;…
  • 直到找到最前面的一个,一定注意不能数组越界

首先还是分步骤的实现

package day06sorting.sort03_insertionsort;import java.util.Arrays;
/*** @author by CSDN@小智RE0* @date 2021-11-04 21:18* 插入排序,分步骤 写一下*/
public class InsertionSortTest {public static void main(String[] args) {//需要完成排序的数组;int[] array = {16,3,12,1,30,6};System.out.println("排序之前的数组-->"+ Arrays.toString(array));//---------------------( 1 )-------------------------------->//首先定义待插入的元素; 以及它的(前一个位置)待插入点;  注意第一步从第二个元素开始;int insertVal = array[1];int insertIndex = 1 - 1 ;//判断是否可插入前面 有序表 的条件;while (insertIndex >=0 && array[insertIndex] > insertVal){//将它的前一个数换到后面来;腾出位置;array[insertIndex +1 ] = array[insertIndex];//待插入点前移;insertIndex -- ;}//注意,上面可能会让 insertIndex 待插入点到达 -1 位置;//这里把这个确定的最小值放入插入点;array[insertIndex +1 ] = insertVal;System.out.println("第一次插入排序后-->"+Arrays.toString(array));//---------------------( 2 )-------------------------------->//改变待插入的元素 以及 待插入点insertVal = array[2];insertIndex = 2 - 1 ;//判断是否可插入前面 有序表 的条件;while (insertIndex >=0 && array[insertIndex] > insertVal){//将它的前一个数换到后面来;腾出位置;array[insertIndex +1 ] = array[insertIndex];//待插入点前移;insertIndex -- ;}//注意,上面可能会让 insertIndex 待插入点到达 -1 位置;//这里把这个确定的最小值放入插入点;array[insertIndex +1 ] = insertVal;System.out.println("第二次插入排序后-->"+Arrays.toString(array));//---------------------( 3 )-------------------------------->//改变待插入的元素 以及 待插入点insertVal = array[3];insertIndex = 3 - 1 ;//判断是否可插入前面 有序表 的条件;while (insertIndex >=0 && array[insertIndex] > insertVal){//将它的前一个数换到后面来;腾出位置;array[insertIndex +1 ] = array[insertIndex];//待插入点前移;insertIndex -- ;}//注意,上面可能会让 insertIndex 待插入点到达 -1 位置;//这里把这个确定的最小值放入插入点;array[insertIndex +1 ] = insertVal;System.out.println("第三次插入排序后-->"+Arrays.toString(array));//---------------------( 4 )-------------------------------->//改变待插入的元素 以及 待插入点insertVal = array[4];insertIndex = 4 - 1 ;//判断是否可插入前面 有序表 的条件;while (insertIndex >=0 && array[insertIndex] > insertVal){//将它的前一个数换到后面来;腾出位置;array[insertIndex +1 ] = array[insertIndex];//待插入点前移;insertIndex -- ;}//注意,上面可能会让 insertIndex 待插入点到达 -1 位置;//这里把这个确定的最小值放入插入点;array[insertIndex +1 ] = insertVal;System.out.println("第四次插入排序后-->"+Arrays.toString(array));//---------------------( 5 )-------------------------------->//改变待插入的元素 以及 待插入点insertVal = array[5];insertIndex = 5 - 1 ;//判断是否可插入前面 有序表 的条件;while (insertIndex >=0 && array[insertIndex] > insertVal){//将它的前一个数换到后面来;腾出位置;array[insertIndex +1 ] = array[insertIndex];//待插入点前移;insertIndex -- ;}//注意,上面可能会让 insertIndex 待插入点到达 -1 位置;//将待插入元素放到那个合适的位置; 注意上面的值由于在循环内要进行 -- 运算,然后才在条件判断;所以实际的待插入点在后一位;array[insertIndex +1 ] = insertVal;System.out.println("第五次插入排序后-->"+Arrays.toString(array));}
}

结果

排序之前的数组-->[16, 3, 12, 1, 30, 6]
第一次插入排序后-->[3, 16, 12, 1, 30, 6]
第二次插入排序后-->[3, 12, 16, 1, 30, 6]
第三次插入排序后-->[1, 3, 12, 16, 30, 6]
第四次插入排序后-->[1, 3, 12, 16, 30, 6]
第五次插入排序后-->[1, 3, 6, 12, 16, 30]

稍微优化一下

package day06sorting.sort03_insertionsort;import java.util.Arrays;/*** @author by CSDN@小智RE0* @date 2021-11-04 21:44* 插入排序*/
public class InsertionSortTest02 {public static void main(String[] args) {//定义要排序的数组;int[] array ={16,3,12,1,30,6};System.out.println("排序之前的数组-->"+ Arrays.toString(array));//进行插入排序;int[] sort = InsertionSort(array);System.out.println("排序结束后的数组-->"+Arrays.toString(array));}//插入排序方法;public static int[]  InsertionSort(int[] array){//首先明白,待插入的元素是从第二个元素开始的,所以它遍历的长度自然就是数组的长度了;for (int i = 1; i < array.length ; i++) {//待插入的元素,待插入的位置;int insertVal = array[i];int insertIndex = i -1;//遍历前面的有序表;找找合适的位置;while (insertIndex >= 0 && array[insertIndex] > insertVal){//前面的一个元素换到后面;array[insertIndex+1] = array[insertIndex];//待插入点前移;insertIndex -- ;}//将待插入元素放到那个合适的位置; 注意上面的值由于在循环内要进行 -- 运算,然后才在条件判断;所以实际的待插入点在后一位;array[insertIndex+1] =insertVal;System.out.println("第"+i+"次插入排序==>"+Arrays.toString(array));}return array;}
}

结果

排序之前的数组-->[16, 3, 12, 1, 30, 6]1次插入排序==>[3, 16, 12, 1, 30, 6]2次插入排序==>[3, 12, 16, 1, 30, 6]3次插入排序==>[1, 3, 12, 16, 30, 6]4次插入排序==>[1, 3, 12, 16, 30, 6]5次插入排序==>[1, 3, 6, 12, 16, 30]
排序结束后的数组-->[1, 3, 6, 12, 16, 30]

5. 希尔排序

在刚才的排序中,可以看到一个比较麻烦的状况;
如果说待插入的这个数啊,它就是比前面假设的有序表里面的元素都小,那么它想到达这有序表合适的位置,就得让这有序表的元素一个个地后移,这要是数据量大的话,也会浪费时间;

那么希尔排序就优化了插入排序的过程;缩小增量;对数组不断地分组,直到增量缩小到1;

图示

在这里插入图片描述

在这里插入图片描述

交换式 实现

分步骤实现

public class SheelSortTest {public static void main(String[] args) {int[] array ={8,9,1,7,2,3,5,4,6,0};//首先是分步骤实现;System.out.println("排序前的数组-->"+ Arrays.toString(array));//定义临时变量;int temp =0;//1.首先两两一组,分为5组; 步长为5;for (int i = 5; i < array.length; i++) {for (int j = i -5; j >=0 ; j-=5) {//交换;if(array[j]>array[j+5]){temp = array[j];array[j] = array[j+5];array[j+5] = temp;}}}System.out.println("第一次排序--->"+ Arrays.toString(array));//2.交换后,分为2组; 步长为2;for (int i = 2; i < array.length; i++) {for (int j = i -2; j >=0 ; j-=2) {//交换;if(array[j]>array[j+2]){temp = array[j];array[j] = array[j+2];array[j+2] = temp;}}}System.out.println("第二次排序--->"+ Arrays.toString(array));//3.分为1组; 步长为1;for (int i = 1; i < array.length; i++) {for (int j = i -1; j >=0 ; j-=1) {//交换;if(array[j]>array[j+1]){temp = array[j];array[j] = array[j+1];array[j+1] = temp;}}}System.out.println("第三次排序--->"+ Arrays.toString(array));}
}
排序前的数组-->[8, 9, 1, 7, 2, 3, 5, 4, 6, 0]
第一次排序--->[3, 5, 1, 6, 0, 8, 9, 4, 7, 2]
第二次排序--->[0, 2, 1, 4, 3, 5, 7, 6, 9, 8]
第三次排序--->[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

综合一下

public class SheelSortTest01 {public static void main(String[] args) {//需要排序的数组;int[] array ={15,25,1,6,8,2,99,27,36,0,55};System.out.println("排序前的数组->"+Arrays.toString(array));int[] sheelSortExchange = sheelSortExchange(array);System.out.println("排序后的数组->"+Arrays.toString(sheelSortExchange));}//交换式希尔排序public static  int[] sheelSortExchange(int[] array){//定义变量记录排序的次数;int num =0;//每次按一半进行分组;for (int group = array.length/2; group >0 ; group/=2) {//分组;for (int i = group; i < array.length; i++) {//组内交换;for (int j = i - group; j >=0 ; j-=group) {//由小到大交换;if(array[j]>array[j+group]){int temp = array[j];array[j] = array[j+group];array[j+group] = temp;}}}System.out.println("第"+(++num)+"次排序后-->"+ Arrays.toString(array));}return array;}
}

排序结果

排序前的数组->[15, 25, 1, 6, 8, 2, 99, 27, 36, 0, 55]1次排序后-->[2, 25, 1, 6, 0, 15, 99, 27, 36, 8, 55]2次排序后-->[0, 6, 1, 8, 2, 15, 36, 25, 55, 27, 99]3次排序后-->[0, 1, 2, 6, 8, 15, 25, 27, 36, 55, 99]
排序后的数组->[0, 1, 2, 6, 8, 15, 25, 27, 36, 55, 99]

移位方式 实现

public class SheelSortTest02 {public static void main(String[] args) {//需要排序的数组;int[] array ={18,99,0,6,25,36,15,4,2,1,15};System.out.println("排序前的数组-->"+Arrays.toString(array));int[] sortShift = sheelSortShift(array);System.out.println("排序后的数组-->"+Arrays.toString(sortShift));}//移位式希尔排序;public static int[] sheelSortShift(int[] array){//定义变量为排序计数;int num = 0 ;//先保障缩小增量;for (int group = array.length/2; group >0 ; group/=2) {//移动位置;for (int i = group; i < array.length ; i++) {//组内插入前先保存待插入的点位和数值;int insertIndex = i;int insertVal = array[i];//若这个待插入数比它同组的前面那个数还小,就考虑移动位置插入;if(array[insertIndex] < array[insertIndex - group]){//不断遍历,直至找到合适位置while (insertIndex -group >= 0 && insertVal < array[insertIndex -group]){//将组内前面的位置空出来;array[insertIndex] =  array[insertIndex - group];//移动要插入的位置;insertIndex -= group;}//将待插入点放到合适位置;array[insertIndex] = insertVal;}}System.out.println("第"+(++num)+"次排序后-->"+Arrays.toString(array));}return array;}
}

排序后结果

排序前的数组-->[18, 99, 0, 6, 25, 36, 15, 4, 2, 1, 15]1次排序后-->[15, 15, 0, 2, 1, 18, 99, 4, 6, 25, 36]2次排序后-->[0, 2, 1, 4, 6, 15, 15, 18, 36, 25, 99]3次排序后-->[0, 1, 2, 4, 6, 15, 15, 18, 25, 36, 99]
排序后的数组-->[0, 1, 2, 4, 6, 15, 15, 18, 25, 36, 99]

6.快速排序

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分
的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序

例如对数组40,2,22,25,14,1,3进行排序

在这里插入图片描述

图解案例1;

在这里插入图片描述

图解案例2对 [-9,78,0,23,-567,70] 进行从小到大的排序

在这里插入图片描述

实现完成

public class QuickSortTest {public static void main(String[] args) {//需要排序的数组;int[] array ={40,2,22,25,14,1,3};int[] quickSort = quickSort(array, 0, array.length - 1);System.out.println(Arrays.toString(quickSort));}/*** 快速排序* @param array 需要排序的数组* @param left  左指针* @param right 右指针* @return      排序后的数组*/public static int[] quickSort(int[] array,int left,int right){//先把左右指针提前存起来;int l = left;int r = right;//找到中心点;int bottom = array[(left +right)/2];System.out.println("当前中心轴值-->"+bottom);//左指针 和 右指针向中心移动;while (l < r){//左右指针移动;while (array[l] < bottom){l+=1;}while (array[r] > bottom){r-=1;}//跳出循环的条件;if(l>=r){break;}//先进行交换;int temp =array[l];array[l] = array[r];array[r] = temp;//考虑接近到达中心点的情况;if(array[l] == bottom){r-=1;}if(array[r] == bottom){l+=1;}}//还需考虑两指针相遇的情况;if(l == r){l+=1;r-=1;}//向左递归;if(left<r){quickSort(array,left,r);}//向右递归;if(right>l){quickSort(array,l,right);}return array;}
}

执行过程

当前中心轴值-->25
当前中心轴值-->22
当前中心轴值-->2
当前中心轴值-->14
[1, 2, 3, 14, 22, 25, 40]

7.归并排序

该算法使用到了分治(分而治之)算法的思想,将大的问题细分为小的问题进行处理

例如图解数组[ 8 , 4 , 5 , 7, 1, 3, 6, 2 ]过程

在这里插入图片描述

最后一个治理合并为有序数组的过程

在这里插入图片描述

在这里插入图片描述

图示对12,3,8,20,18,1,5进行排序

在这里插入图片描述

具体的实现过程

package day06sorting.sort06_mergesort;import java.util.Arrays;/*** @author by CSDN@小智RE0* @date 2021-11-06 13:48* 归并排序*/
public class MergeSortTest {public static void main(String[] args) {//需要排序的数组;int[] array= {12,3,8,20,18,1,5};//临时数组;int[] temp = new int[array.length];//归并排序;mergeSort(array,0, array.length - 1,temp );System.out.println(Arrays.toString(array));}/*** 分化数组* @param array 原数组* @param left  左索引* @param right 右索引* @param temp  临时数组*/public static void mergeSort(int[] array, int left, int right, int[] temp){if(left < right){//直接定义中心索引;int middle = (left + right) / 2;//左边递归分化;mergeSort(array,left,middle,temp);//右边递归分化;mergeSort(array,middle+1,right,temp);//合并数组;mergeArray(array,left,right,middle,temp);}}/*** 首先从合并处理开始写;* @param array 原数组* @param left  左边的数组索引* @param right 右边的数组索引* @param middle 中间的索引* @param tempArray 临时的数组*/private static void mergeArray(int[] array, int left, int right, int middle, int[] tempArray){//先确定i作为左边的索引;j作为右边列表的索引;int i = left;int j = middle + 1;//临时数组的索引;int tempIndex = 0;//首先根据需要,由小到大把一块数组先放入临时数组;while (i <= middle && j<=right){//左边的放入临时数组;if(array[i] <= array[j]){tempArray[tempIndex] = array[i];i+=1;tempIndex+=1;}else {//否则右边的放入临时数组;tempArray[tempIndex] = array[j];j+=1;tempIndex+=1;}}//可能一块的数组已经存完了,但是另一块还有剩余,那就全部存入临时数组;while (i<= middle){tempArray[tempIndex] = array[i];i+=1;tempIndex+=1;}while (j<=right){tempArray[tempIndex] = array[j];j+=1;tempIndex+=1;}//最终要把临时数组的放进原数组中去;//但是注意,由于要递归,这边的拷贝索引是动态的;//这里先初始化临时的索引;tempIndex = 0;//定义拷贝时的原数组左边动态索引;int originalLeftIndex = left;System.out.println("此时左索引originalLeftIndex==>"+originalLeftIndex +"此时右索引right==>"+right);while (originalLeftIndex<=right){array[originalLeftIndex] = tempArray[tempIndex];originalLeftIndex+=1;tempIndex+=1;}}}

执行结果

此时左索引originalLeftIndex==>0此时右索引right==>1
此时左索引originalLeftIndex==>2此时右索引right==>3
此时左索引originalLeftIndex==>0此时右索引right==>3
此时左索引originalLeftIndex==>4此时右索引right==>5
此时左索引originalLeftIndex==>4此时右索引right==>6
此时左索引originalLeftIndex==>0此时右索引right==>6
[1, 3, 5, 8, 12, 18, 20]

8.基数排序

将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。
以空间换时间;若数据量过大,会出现内存问题(OOM).

图示 数组[ 53, 3, 542, 748, 14, 214 ]的排序过程

在这里插入图片描述

图解过程

(1)
在这里插入图片描述

(2)

若这个元素没有十位数的话就补零,放在第一个桶里(即下标为0的那个数组),

在这里插入图片描述

(3)

同理,若没有百位数也在前面补零,放在第一个桶里

在这里插入图片描述

在实现时,用二维数组表示这10个桶数组;
每个桶的大小就设置为最大的,也就是需要排序的数组长度;
然后,还需要考虑每个桶实际存入的元素个数,以便于取出时可以明确地知道是否要遍历,遍历几次;

首先是分步骤完成

package day06sorting.sort07_basesort;import java.util.Arrays;/*** @author by CSDN@小智RE0* @date 2021-11-06 16:12* 基数排序*/
public class BaseSortTest {public static void main(String[] args) {//需要排序的数组;int[] array ={53,77,3,542,748,14,214};//分步骤完成过程;//定义二维数组方放10个桶;int[][] barrel = new int[10][array.length];//定义数组记录桶中元素的个数;int[] barrelCount =new int[10];//取出元素时,原数组的索引;int index = 0 ;System.out.println("第一次排序---->");//向桶里放入数据;for (int value : array) {//第一次是取个位数的;int numberOrders = value % 10;barrel[numberOrders][barrelCount[numberOrders]] = value;//注意要计数;barrelCount[numberOrders]++;}//把桶里的数又按顺序拿出来放进数组;for (int i = 0; i < barrelCount.length; i++) {//首先保证桶里有没有数据;if(barrelCount[i]!=0){for (int j = 0; j < barrelCount[i]; j++) {array[index++] = barrel[i][j];}}}System.out.println("第一次排序后-->"+ Arrays.toString(array));System.out.println("第二次排序---->");//需要重置计数的数组;barrelCount =new int[10];//向桶里放入数据;for (int k : array) {//第一次是取个位数的;int numberOrders = k / 10 % 10;barrel[numberOrders][barrelCount[numberOrders]] = k;//注意要计数;barrelCount[numberOrders]++;}//注意index要重置;index =0;//把桶里的数又按顺序拿出来放进数组;for (int i = 0; i < barrelCount.length; i++) {//首先保证桶里有没有数据;if(barrelCount[i]!=0){for (int j = 0; j < barrelCount[i]; j++) {array[index++] = barrel[i][j];}}}System.out.println("第二次排序后-->"+ Arrays.toString(array));System.out.println("第三次排序---->");//需要重置计数的数组;barrelCount =new int[10];//向桶里放入数据;for (int k : array) {//第一次是取个位数的;int numberOrders = k / 10 / 10 % 10;barrel[numberOrders][barrelCount[numberOrders]] = k;//注意要计数;barrelCount[numberOrders]++;}//注意index要重置;index =0;//把桶里的数又按顺序拿出来放进数组;for (int i = 0; i < barrelCount.length; i++) {//首先保证桶里有没有数据;if(barrelCount[i]!=0){for (int j = 0; j < barrelCount[i]; j++) {array[index++] = barrel[i][j];}}}System.out.println("第三次排序后-->"+ Arrays.toString(array));}
}

执行的过程

第一次排序---->
第一次排序后-->[542, 53, 3, 14, 214, 77, 748]
第二次排序---->
第二次排序后-->[3, 14, 214, 542, 748, 53, 77]
第三次排序---->
第三次排序后-->[3, 14, 53, 77, 214, 542, 748]

稍微优化一下

将这个分步的写法综合一下,因为实际计算时并不是说固定的排序几次;
首先就得找出最大值的长度;以便于确定要去排序几次;

//基数排序的方式;
public static void baseSort(int[] array) {int maxVal = array[0];//首先找最大值,for (int j : array) {if (j >= maxVal) {maxVal = j;}}//得到最大值的长度;int maxLength = (maxVal + "").length();//输出测试一下;System.out.println("当前要排序数组的最大元素为:" + maxVal + " 最大长度为:" + maxLength);//定义二维数组放置10个桶;int[][] barrel = new int[10][array.length];//定义一个数组来记录每个桶的元素数量;int[] barrelCount = new int[10];for (int i = 0, n = 1; i < maxLength; i++, n *= 10) {for (int value : array) {//第一次取个位数;第二次取十位数;以此列推;int numberOrders = value / n % 10;//存入桶中;barrel[numberOrders][barrelCount[numberOrders]] = value;//计数递增;barrelCount[numberOrders]++;}//数组的索引;int index = 0;//取出桶的元素存向数组;for (int k = 0; k < barrelCount.length; k++) {//先判断桶里有没有元素;if (barrelCount[k] != 0) {for (int j = 0; j < barrelCount[k]; j++) {array[index++] = barrel[k][j];}}//重置记录桶的元素数量的数组;barrelCount[k] = 0;}}
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. MySQL高可用之主备同步:MySQL是如何保证主备一致的?

    快速恢复&#xff0c;当主库出错了&#xff08;比如误删表&#xff09;&#xff0c;通过备库来快速恢复数据。对于规模很大的应用&#xff0c;对于数据恢复速度的容忍性很低的情况&#xff0c;通过配置一台与主库的数据快照相隔半小时的备库&#xff0c;当主库误删表&#xff0…...

    2024/4/14 21:45:46
  2. 启动tomcat项目报错com.mysql.jdbc.Driver改为com.mysql.cj.jdbc.Driver//Communications link failu

    原来数据库5.5升级到8.0后&#xff0c;数据库连接配置没有改造成的 用的依赖 <dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.11</version></dependenc…...

    2024/4/19 23:55:04
  3. 解决CSS样式修改后没反应

    问题:在jsp修改CSS样式后看不到效果,clear过了,tomcat重启过了,浏览器缓存清除过了,还是没反应。 解决方法:双击tomcat服务器,选择Modules,点Add Web Module...,在弹出的窗口选择你的项目,在path输入/就好了 注意:访问的时候省略项目名称,例如http://localhost:808…...

    2024/5/6 5:14:18
  4. 教你快速入门自然语言处理——微软亚洲研究院首席研究员(周明博士)

    导读&#xff1a;自然语言处理(NLP)是计算机科学&#xff0c;人工智能&#xff0c;语言学关注计算机和人类(自然)语言之间的相互作用的领域。因此&#xff0c;自然语言处理是与人机交互的领域有关的。 以下是小编整理的其他文章&#xff0c;希望能对各位有所帮助 人工智能学习…...

    2024/4/26 23:07:08
  5. 权限框架之Spring Security 认证源码分析

    文章目录Spring Security 源码分析一 基本知识1.1 核心概念1.2 基本原理二 源码分析2.1 登录验证2.1.1 基本流程2.1.2 验证过滤器2.1.3 尝试认证2.1.4 封装密码认证令牌2.1.5 认证与校验2.1.6 认证失败与成功Spring Security 源码分析 一 基本知识 1.1 核心概念 Authenticat…...

    2024/4/25 13:10:21
  6. 评论区抽奖程序2.0

    评论区抽奖程序2.0 稍微的加了一点点功能&#xff0c;让程序更加的自动化了 【送书活动】 每周三发文章送书&#xff0c;两本 开奖时间为周五晚上8.00 下周书籍寄出 关注博主&#xff0c;每周抽奖 1. 程序作用 从某CSDN文章的评论区抽取人&#xff0c;至于抽人干嘛&#xff…...

    2024/4/19 13:41:59
  7. 养成数据分析师的品质和思维模式

    Xmind文件下载 链接&#xff1a;https://pan.baidu.com/s/1IrsSlHuQOl0zMIJ8tjcxgw 提取码&#xff1a;qr3q...

    2024/4/19 21:37:06
  8. git 本地重新关联新的远程仓库命令/查看本地关联远程仓库

    git remote -v // 查看本地已经关联的远程仓库 git remote rm name // # 删除远程仓库 git remote rename old_name new_name // # 修改仓库名 git remote add name 远程仓库地址 // name 为要取的仓库名字 远程仓库地址 为要关联的远程仓库地址...

    2024/5/6 6:40:04
  9. 机器学习白化whitening

    https://blog.csdn.net/hjimce/article/details/50864602...

    2024/4/19 6:59:35
  10. pytorch之torch.nn.Conv2d()函数详解

    文章目录 一、官方文档介绍二、torch.nn.Conv2d()函数详解参数详解参数dilation——扩张卷积&#xff08;也叫空洞卷积&#xff09;参数groups——分组卷积 三、代码实例 一、官方文档介绍 官网 nn.Conv2d&#xff1a;对由多个输入平面&#xff08;多通道&#xff09;组成的…...

    2024/4/14 21:46:52
  11. 短租listing数据分析(探索性数据分析+简单建模尝试)

    Xmind文件下载 链接&#xff1a;https://pan.baidu.com/s/1jDgGsL2Zp1Cv8ZOlslJyZg 提取码&#xff1a;oyqf...

    2024/4/14 21:46:47
  12. Python小记 面向对象-类

    文章目录类属性类方法总结实例方法构造方法 __init__()私有方法析构方法 __del__()静态方法、类方法property抽象方法专有方法继承super类属性 实例属性 不同实例不关联 私有属性 __开头。__var 不能在类外访问 类属性 类名.变量名 所有实例共有 class test:name test # 类…...

    2024/4/14 21:46:32
  13. java连接mysql

    1、驱动包 使用maven的中央仓库来查找安装&#xff1a;https://mvnrepository.com/ 在pom中添加依赖配置 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0…...

    2024/4/15 14:39:22
  14. 2021-11-06文件共享

    ...

    2024/4/20 6:39:57
  15. 三相直流无刷电机驱动

    有霍尔BLDC的基本原理是用所谓“六步换向法”&#xff0c;根据转子当前的位置&#xff0c;按照一定的顺序给定子绕组通电使BLDC电机转动。 一个简单的BLDC的构造如图所示。电机外层是定子&#xff0c;包含电机绕组。多数BLDC都有三个Y型连接的绕组&#xff0c;这些绕组中的每一…...

    2024/4/19 16:03:05
  16. JAVA高级学习(一)——Collection集合

    一、集合的概念 用来提供一种存储孔吉安可变的存储模型&#xff0c;存储的数据容量可以随时发生改变。 集合体的结构&#xff1a; 接口 接口实现类特点Collection 单列集合List 集合ArrayList 先进先出排序&#xff0c;元素可重复LinkedLis…...

    2024/4/17 23:37:34
  17. 蓝桥杯03-数码管的显示

    文章目录前言一、基础二、代码部分1.数码管数字显示部分2.译码器的选择部分3.数码管的显示前言 用一个小题目来演示数码管的显示&#xff1a; 蓝桥杯的单片机平台上一共有八个数码管&#xff0c;我们依次让他们显示0-7 8个数字 一、基础 分析一个陌生器件的功能&#xff0c;…...

    2024/4/26 16:00:39
  18. echarts水球图-动态波纹百分比数据显示

    最近帮助朋友根据ued图学习设计了一个echarts水球图&#xff0c;觉得还蛮有意思的&#xff0c;在这记录一下 具体效果&#xff1a; 废话不多说&#xff0c;在这先给大家看一下是什么样子的效果&#xff0c;会不会是你以后也会用到的&#xff1a; 看看&#xff0c;这种带比例的…...

    2024/4/24 14:55:17
  19. MySQL进阶三板斧(三)看清“触发器 (Trigger)

    3. 实现复杂的数据完整性规则 实现非标准的数据完整性检查和约束。触发器可产生比规则更为复杂的限制。与规则不同&#xff0c;触发器可以引用列或数据库对象。例如&#xff0c;触发器可回退任何企图吃进超过自己保证金的期货。 提供可变的缺省值。 4. 实现复杂的非标准的数…...

    2024/5/4 17:30:44
  20. Cannot find a valid baseurl for repo: base/7/x86_64 yum -y install rsync 报错

    1.先看下与之相配的克隆机的内网能不能ping成功 ping one204 若内网成功&#xff0c; ping www.baidu.com外网不成功&#xff0c; 则可能有是网关配置问题&#xff0c;查看网关是否匹配&#xff0c; 查看虚拟机网关 进入VMware 》编辑》虚拟网络编辑器》选择NAT8 NAT模式》选择…...

    2024/4/14 21:46:47

最新文章

  1. 【MySQL】2.深入理解MySQL:数据类型、DDL与DML语句全解析

    数据类型、DDL&#xff08;数据定义语言&#xff09;和DML&#xff08;数据操纵语言&#xff09;语句构成了数据管理和操作的核心。从精心选择数据类型以优化存储和查询性能&#xff0c;到运用DDL语句设计和调整数据库结构&#xff0c;再到使用DML语句对数据进行日常的增删改查…...

    2024/5/6 10:10:23
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/6 9:38:23
  3. Django实现的登录注册功能

    1 前言 在Web开发中&#xff0c;用户登录和注册是最基本且必不可少的功能。Django&#xff0c;作为一个高级的Python Web框架&#xff0c;为我们提供了强大的工具和库来快速实现这些功能。下面&#xff0c;我将详细介绍如何使用Django来实现用户登录和注册功能。 2 功能介绍 …...

    2024/5/5 8:36:26
  4. Redis Stack十部曲之三:理解Redis Stack中的数据类型

    文章目录 前言String字符串作为计数器限制 List限制列表阻塞列表自动创建和删除聚合类型键限制 Set限制 Hash限制 Sorted Set范围操作字典操作更新分数 JSON路径限制 BitMapBitfieldProbabilisticHyperLogLogBloom filterCuckoo filtert-digestTop-KCount-min sketchConfigurat…...

    2024/5/4 13:36:16
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/4 23:54:56
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/4 23:54:56
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/6 9:21:00
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/4 23:55:06
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/4 23:55:01
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57