超详细的十大排序算法原理及java代码实现

      • 1.直接插入排序
      • 2.折半插入排序(基于折半查找法,即二分查找法)
      • 3.希尔排序
      • 4.冒泡排序
      • 5.快速排序
      • 6.选择排序
      • 7.归并排序
      • 8.堆排序
      • 9.计数排序
      • 10.桶排序
      • 11.基数排序
      • 效率比较:

注意:代码大同小异,最好自己理解了思想后自己写一遍

1.直接插入排序

顾名思义就是从数组中一个一个取元素,然后一个一个插入形成有序序列。比如说一个int型无序数组,从小到大排序。

特点:平均时间复杂度O(n2) 空间复杂度O(1) 稳定的
适用情况:数据量比较少的排序

步骤:
(1)选取第一个元素arr[0],因为只有一个元素,无须比较,直接插 入arr[0]的位置。
(2)选取第二个元素arr[1]插入前面已经排好顺序的序列中,这里前面排序好的序列里 面只有arr[0],所以只许将arr[1]和arr[0]进行比较,如果arr[1]<arr[0],则交换顺序,小的 排在前面。
(3)选取第三个元素arr[2]插入前面已经排好顺序的序列中(这里只有arr[0]arr[1]两个 元素),这里注意要从后往前比较,如果该元素比前面的小,则和前面一个元素换位置, 继续和更前面的元素比较,如果还比前面的小,还要跟前面继续换位置,直到到达正确 的顺序位置(这里就是升序嘛)就停止比较了,也不再需要跟更前面的元素比较了。
(5)选取第四个元素arr[3],同步骤
(6)以此类推……

Java实现代码:

//直接插入排序,从小到大
int[] arr = {2,5,6,1,3,0,9,8};//从第二个元素开始插入for(int i=1;i<arr.length;i++){int value = i;int j = i-1;//第i个要插入的元素从后往前比较,即与i-1开始比较while(j>=0&&arr[value]<arr[j] )//要插入的元素比前面已经排好序的元素小{int temp;temp = arr[value];arr[value] = arr[j];arr[j] = temp;j--;value--;}}for(int a :arr){System.out.println(a);}

控制台结果:
在这里插入图片描述

代码详解:这里定义了一个无序int数组,进行从小到大的排序
(1)for语句是从int=1,即第二个元素开始插入,因为第一个元素无需判断,所以从i=1到i=arr.length-1都要一个一个插入。
(2)Value变量的定义:这里为什么要定义一个中间变量value呢,因为在插入的过程中要一直比较新元素与前一个元素的大小来判断是否要互换位置,如果互换位置了,就需要value来保存互换位置后新元素的下标,也就是说value保存了整个变换过程中插入的新元素的位置。
(3)While语句判断j是否是>=0,如果j=0,表示要插入的新元素在arr[1]的位置,此时要比较arr[0]和新元素的大小来判断是否互换位置,完成这一步之后j=-1,所以不再循环,插入已经完成。(这里有个小细节就是while语句里的判断内容:j>=0要写在&&之前是因为当不满足j>=0时,编译器不会去判断后面的arr[value]<arr[j],也就不会抛出数组越界的异常,如果arr[value]<arr[j]放在&&前面挡j<0时就会有arr[-1],编译器就会报错)
(4)While语句里面互换元素位置后更新新元素的位置value(value–;)和j的位置(j–;),再继续比较。
(5)最后foreach语句打印查看结果。

2.折半插入排序(基于折半查找法,即二分查找法)

折半插入排序就是对直接插入排序的一个小变化,在已经完成排序的部分中找出第一个比即将插入的新元素大的元素位置,将新元素插入到该位置,该位置后面的元素一次向后移动一个位置。通俗点将就是找到一个位置将这个新元素插入进去,该位置之后的元素一次向后移动一个位置。怎样找到这个位置的,就是通过折半(二分)查找法。

特点:平均时间复杂度O(n2) 空间复杂度O(1) 稳定的
适用情况: 元素初始序列接近有序序列时

Java代码实现:

//折半插入排序int[] arr = {2,5,6,1,3,0,9,8};//待排序的数组int left ,right;//已经完成排序部分的左右边界int middle;for(int i=1;i<arr.length;i++)//遍历待排序的部分,一个一个插入{left = 0;right = i-1; while(left<=right){middle = (left + right)/2;if(arr[middle]>arr[i]){right = middle-1;}else{left = middle+1;}}int temp = arr[i];for(int j=i-1;j>=left;j--){arr[j+1] = arr[j];}arr[left] = temp;}for(int a :arr){System.out.println(a);}

代码详解
折半插入排序的重点就是折半查找,left和right用来指示新元素插入的区间,通过折半的方法逐渐缩小left和right之间的区间,while语句控制区间的缩小,边界条件是left=right=middle,也就是最终区间缩小到最后只剩一个元素,left和right同时指向该元素,此时判断如果arr[middle]>arr[i],此时right左移,新元素放在left位置上,也就是当前位置。如果arr[middle]<=arrileft右移一个单位,所以还是应该放在left位置上,但不是刚刚的当前位置了,而是此位置的下一个位置。求出来存放新元素的left位置及其之后的位置应该先一次后移一个位置,然后把新元素放到求出来的这个位置,即当前left指向的位置。

3.希尔排序

希尔排序是对直接插入排序的改进,在元素量较少或者初始数据接近有序的时候,直接插入排序效率较高。希尔排序就针对这两点进行了改进。首先是分组,将大量的数据分成了一组一组的,这样就实现了对少量数据的处理;其次是不断地慢慢的使数组序列变得接近有序。

特点:时间复杂度跟增量序列有关,极其复杂 空间复杂度O(1) 不稳定
在这里插入图片描述

Java代码实现:

int[] arr = {14,5,4,5,3,13,9,8};//待排序的数组int gap = arr.length;while(gap>,0){gap = gap/2;for(int i=0;i<arr.length;i++){int value = i;int j = value - gap;while(j>=0&&arr[j]>arr[value]){int temp;temp = arr[j];arr[j] = arr[value];arr[value] = temp;value-=gap;j-=gap;}}System.out.println(Arrays.toString(arr));

控制台结果:
在这里插入图片描述
代码详解
(1)希尔排序原理上跟直接插入排序是相同的,通俗点说,不同点就是在处理大量元素时,可以“分组”,将大量数据分组成几组少量数据,每一组数据之间又是有序的,所以等间隔抽取数据组成一组,这样所有数据合在一起的时候整个数据也是接近有序的,只需要做稍微变动即可完成排序。
(2)gap就是增量,也就是间隔取值量,所有元素将分成gap个组,gap越大,每个组中的元素就越少。分完组以后arr[i]不再是与arr[i-1]相比较了,而是跟arr[i-gap]比较,即跟同组内的前一个元素相比较。直到gap=1的时候表示的就是所有的元素分成一个组,也就是对所有的元素进行排序。因为前面已经经过多次不同gap值情况下的排序,所以这时候的元素基本上已经接近有序,只需要稍加改动即可完成排序。
(3)“分组”实际上是虚拟的分组,并不是真正意义上的分组。与直接插入排序相比,只是多了个控制器而已。
(4)为了形象的理解,举一个例子。军训的时候为了排列队形,教官说大家站成一排,从1-5循环报数,最后说,报1的出列,形成第一排;报2的出列,形成第二排;最后形成了五排;然后每一排当中按照高矮个站队。这就相当于gap=5时进行的一次调整,每一排就相当于一个组;经过多次gap不同值的调整,元素逐渐接近有序。

4.冒泡排序

冒泡排序顾名思义就是像开水一样不断冒泡泡。简单地说,如果是将元素从小到大排序,每次就冒出一个最大的元素,放在数组的最后面。怎样保证冒一次泡后最大的元素就放在最后面了呢?冒泡排序是通过交换相邻元素来实现的。

步骤解析:
(1)比较arr[0]和arr[1],小的放在前面,大的放在后面,此时a[1]存放的一定是a[0]、 a[1]这两个元素中最大的元素;
(2)再次比较arr[1]和arr[2],小的放在前面,大的放在后面,此时a[2]存放的一定是a[0]、 a[1]、a[2]这三个元素中最大的元素;
(3)同理,继续比较a[2]和a[3],小的放在前面,大的放在后面,此时a[3]存放的一定是a[0]、 a[1]、a[2]、a[3]这四个元素中最大的元素;
(4)以此类推,经过一轮的比较之后,arr[arr.length-1]中存放的就是所有元素中最大的元 素;
(5)那么要经过多少轮才能完成排序呢?我们知道,经过一轮我们就可以将未排序部分中的最大值放到后面。假如有五个元素,那么经过四轮之后,后面四个元素已经排好序了,只剩一个元素和第一个位置,所以一定是最小的元素,不用比较了;同理如果有i个元素,我们最多也只需要i-1轮就能完成排序。

java代码实现:

int[] arr = {49,38,65,97,76,13,27,49,55,4};//i控制比较的轮数,累计比较arr.length-1轮for(int i=0;i<arr.length-1;i++){//每一轮不断比较arr[j]和arr[j+1],j不断递增;for(int j=0;j<arr.length-1;j++){if(arr[j]>arr[j+1]){int temp;temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}System.out.println(Arrays.toString(arr));//打印数组查看结果}

控制台结果:
在这里插入图片描述

代码详解
(1)i控制比较的轮数,也可以用while来控制,都一样的,只要保证能循环arr.length-1轮就可以了,不要那么死板!
(2)j表示数组元素的下标,从0开始到arr.length-2结束,所以控制条件写的j<arr.length-1;因为要比较arr[j]和arr[j+1]的大小,j不需要等于arr.length-1,否则下标溢出了!
(3)最后System.out.println是打印数组查看结果,没学过java的可以用其他编程语言代替。
(4)最后看结果,每一次把前面未排序部分中的最大的值冒泡冒出来放到后面俩排序,这就是冒泡;

5.快速排序

快速排序的思想:在所有元素中随便选取一个元素i,假设从小到大排序,那么比i小的元素放在i的左边,比i大的元素放在i的右边,但是不保证i左右两边的元素是有序的,只能保证i左边的元素小于等于i,i右边的元素大于等于i.

但是怎样才能完成排序的?很明显可以看出来在完成上面这样一轮的变化之后(并没有完成排序),元素i的位置就完全确定了,加入此时i是第五个元素,那么完成排序之后i仍然是第五个元素。所以我们就把i左右两边“分成”两个数组,对每个数组继续执行上面的操作,这样又能确定一个元素的位置了,然后i左边继续“分成”两个数组,i右边也继续“分成”两个数组,对每个数组再继续执行上面的操作……逐渐的所有的元素的位置就慢慢确定了,最终的序列就是正确的顺序。

具体实现方法
(1)一般用第一个数当成基准数temp(temp = arr[0]),然后从数组后面开始,和temp比较。
(2)如果比temp大或者等于temp,应该放在temp右边(等于temp时放在右边是为了保证稳定性),所以位置不用动,右指针j左移继续判断,当arr[j]<temp时,应该放在temp的左边,所以放在arr[0]的位置,因为此时arr[0]的值已经保存在temp中了,不用担心覆盖。
(3)这时候开始移动左指针i,当arr[i]<=temp时(等于是为了保证稳定性),继续移动左指针i,当arr[i]>temp时,应该放在temp的右边,可是放在右边哪里呢?刚刚arr[j]的值已经赋值给了arr[0],所以arr[j]也可以覆盖,而且正好在temp的右边,就覆盖它吧,于是arr[j]=arr[i].
(4)然后又轮到移动判断右指针了,还是按照上面的方法依次移动右指针和左指针,直到i=j的时候,此时这个位置就是temp的位置,左边的所有元素比temp小,右边的所有元素比temp大;
(5)把temp左右两边看成两个新的数组,分别对他们用这种办法排序,直到begin=end,也就是只有一个元素的时候就不用再比较了,排序已经完成了。

Java代码实现:

public class QuickSortDemo 
{public static void main(String[] args) {int[] arr = {49,38,65,97,76,13,27,49,55,4};QuickSortDemo.quickSort(arr, 0, 9);System.out.println(Arrays.toString(arr));}static void quickSort(int[] arr, int begin, int end){//如果begin<end说明temp左边或者右边不止一个元素,所以要继续递归//结束条件就是begin=endif(begin < end){int i = begin;int j = end;int temp = arr[i];while(i<j){//右边尾部开始判断,比temp大或者等于temp就继续左移指针while(i<j&&arr[j]>=temp){j--;}//找到第一个比temp小的元素,应该放在temp左边arr[i] = arr[j];//左边首部开始判断,比temp小或者等于temp就继续右移指针while(i<j&&arr[i]<=temp){i++;}//找到第一个比temp大的元素,应该放在temp右边arr[j] = arr[i];}arr[i] = temp;quickSort(arr,begin,i-1);quickSort(arr,i+1,end);}}
}

控制台结果:
在这里插入图片描述

代码解释:
(1)这里我定义了一个函数quickSort()来接收排序的数组,排序的开始位置begin和排序的终止位置end。并且用的递归,递归的最终条件就是begin=end,此时要排序的范围就是一个元素,根本不用排序,所以不会进入if,什么也不做,这一层函数结束完毕,逐渐返回上一层函数,上上一层函数,返回到最后一层函数时所有代码执行完毕,排序已经完成。
(2)代码中需要注意的几个点:begin和end表示的是要排序的范围,在函数中不能改变,所以要用i,j来复制begin和end,(i,j其实保存的是下标,告诉我们前面移动到哪里了,后面移动到哪里了)以便在代码中控制循环。另一个就是最内部的两个while语句要判断i<j,因为i,j在内部也是不断变化的,不能只在外层while判断。

参考:https://blog.csdn.net/elma_tww/article/details/86164674

6.选择排序

选择排序的思想:假如我们要从小到大排序,假设第一个元素arr[0]是最小的元素,然后将arr[0]与之后的所有元素依次比较,谁小谁就到前面来,遍历完以后整个数组中最小的元素就在arr[0]这个位置上了。再从arr[1]开始,假设arr[1]是最小的元素,arr[1]与之后所有的元素依次比较,谁小就到arr[1]这个位置上来。依次类推,当arr[arr.length-2]这个位置元素确定时,最后一个元素就在最后一个位置了,排序结束了。

**注意:**选择排序与冒泡排序的共同点就是每次选出一个最大或者最小的;但是选择排序的特点就是我只管我这个位置,只要后面的元素你比我小,你就到我这里来,就像擂台一样,谁小谁就是霸主。而冒泡排序就的特点就是相邻元素之间进行比较,最终大的元素逐渐逐渐向后移动,也就是逐渐逐渐冒泡出来。

Java代码实现:

int[] arr = {49,38,65,97,76,13,27,49,55,4};for(int i=0;i<arr.length-1;i++){for(int j=i+1;j<arr.length;j++){if(arr[i]>arr[j]){int temp;temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}System.out.println(Arrays.toString(arr));}

控制台结果:
在这里插入图片描述

代码很简单,外层循环i控制要放最小元素的位置,内层循环j控制arr[i]与其之后的每一个元素进行比较,从结果可以看出每循环一次,就排一个最小的元素。

7.归并排序

归并排序的思想就是分治。将一个大数组分成一个一个的小数组,使每一个小数组内部有序,然后再两两合并成一个中型数组,使中型数组也有序,最后合并成一个整形数组。排序的过程是在合并的时候完成两个数组的排序。所以整个排序算法分为两部分,一部分就是递归思想的实现,其实我个人感觉递归还是挺难理解的。另一部分就是怎样在合并的时候排序了。
在这里插入图片描述

递归的理解:
首先递归要有一个终止条件,不然递归永远不会终止,程序就会崩溃。程序中定义了两个函数,其中一个sort函数来实现排序。我们可以这样考虑,我们定义这个函数来干嘛?来排序嘛对吧。这个函数有什么参数?有排序的数组arr,排序的左右边界范围left和right,还有一个中间数组用来临时存储数值的。这个sort函数怎么用?给出要排序的数组arr和排序的范围边界left,right和一个跟arr同长度的数组,通过这个函数以后就能给arr数组排好序。既然这样那么我们将这个数组分成两个子数组(不是一定要从中间分的,从任何一个位置分都可以),对每个子数组再继续使用sort排序,只不过是参数稍有改变,就这样sort1中使用sort2,sort2中使用sort3,sort3中使用sort4,依次类推,直到遇见了终止条件,然后sort函数开始一层一层的返回。因为是sort函数是入栈的,所以刚才是一层一层的入栈,遇到终止条件以后就一层一层的出栈,也就是sort函数一层一层的返回,这里不理解没关系哈。

如何在合并的时候排序:
可以这样理解,左右两个子数组都是有序的,合并完以后怎样有序呢?可以这样,比较两个子数组的“头”元素,也就是arr[0],元素值小的,就把头砍下来放在临时数组temp中,被砍数组就会有一个新的“头”了,两个数组再继续比较“头”元素的大小,谁的小,就砍下来依次放入到temp中,当其中一个数组全部放入temp中时,剩下的另一个数组就可以把剩下的元素按照顺序依次放入temp中了,自己可以举个简单的例子尝试一下哈,很好理解。

Java代码实现:

public class GuiBingSort 
{public static void main(String []args){int[] arr = {49,38,65,97,76,13,27,49,55,4};int[] temp = new int[arr.length];GuiBingSort.sort(arr, 0, arr.length-1, temp);System.out.println(Arrays.toString(arr));}private static void sort(int[] arr, int left,  int right, int[] temp) {//递归的终止条件就是left = right,也就是说待排序的数组只有一个元素,根本无需排序if(left<right){int middle = (left + right)/2;//左边数组排序GuiBingSort.sort(arr,left,middle,temp);//右边数组排序GuiBingSort.sort(arr,middle+1,right,temp);// 两个数组合并并完成最终排序join(arr,left,middle,right,temp);}}private static void join(int[] arr, int left, int middle, int right, int[] temp) {int i = left;int j = middle+1;int count = 0;while(i<=middle&&j<=right)//终止循环的条件就是其中一个子数组已经全部添加进temp数组{if(arr[i]<=arr[j]){temp[count] = arr[i];i++;count++;}else{temp[count] = arr[j];j++;count++;}}//如果左边数组全部遍历完成的话i=middle+1,所以如果i<=middle说明右边子数组全部遍历完成//所以把左边子数组还未遍历的部分直接添加进temp数组就可以,也是有序的。while(i<=middle){temp[count] = arr[i];i++;count++;}//同理判断右边子数组while(j<=right){temp[count] = arr[j];j++;count++;}//最后将temp数组的内容拷贝给arrcount = 0;while(left<=right){arr[left] = temp[count];left++;count++;}}}

控制台结果:
在这里插入图片描述

代码详解:
(1)我要排序整个数组我要怎么办?将这个数组分成两个子数组,将两个子数组分别排好序,然后合并在一起时排好序不就好了吗,所以代码中将数组arr分成了两个数组,leftmiddle和middle+1right,怎样给这两个数组排序的,用sort呀,两个子数组排序好后开始合并,用join函数,所以排序就已经完成了。
(2)Sort递归的终止条件就是left=right,表示只有一个元素参与排序,根本不用排,所以直接跳过if,此sort函数执行完毕,返回上一层sort继续执行,上一层sort函数执行完毕,继续返回上上一层函数,就这样最上面一层sort执行完以后,数组也就完成了排序。

参考:https://www.cnblogs.com/chengxiao/p/6194356.html

8.堆排序

堆排序顾名思义就是利用堆来排序,什么是堆呢?这里所说的堆其实就是一个完全二叉树结构。(不懂完全二叉树的可以去了解一下,很简单)

堆排序的思想:将要排序的数组按照下标依次放入完全二叉树中,然后经过一系列变化将这颗乱序的二叉树变成一个大顶堆,此时arr[0]存放的是整个数组中最大的元素,然后将这个元素放在数组最后一个位置arr[arr.length-1]上,再将前面arr[0]~arr[arr.length-2]重新生成一个大顶堆,然后将arr[0]放在倒数第二个位置,循环往复,数组从后往前逐渐排好顺序,而且是升序排列。
在这里插入图片描述

java代码实现:

package package_3;
import java.util.Arrays;
public class TreeSort 
{public static void main(String[] args) {int[] arr = {49,38,65,97,76,13,27,49,55,4};
//for循环控制每次拿出一个最大值后剩下的数组部分继续重新构建大顶堆,直到排序完成for(int length=arr.length;length>0;length--){buildTree(arr,length);exchange(arr,0,length-1);}System.out.print(Arrays.toString(arr));}//定义一个函数,能够将arr数组转换成大顶堆结构static void buildTree(int[] arr,int length){if(length>1){for(int i=length/2-1;i>=0;i--){if(2*i+2<=length-1){if(arr[2*i+1]<arr[2*i+2]){int t = arr[2*i+1];arr[2*i+1] = arr[2*i+2];arr[2*i+2] = t;}}if(arr[2*i+1]>arr[i]){int t = arr[i];arr[i] = arr[2*i+1];arr[2*i+1] = t;}}}}//交换根节点元素和数组最后一个元素static void exchange(int[] arr, int begin, int end){int temp = arr[begin];arr[begin] = arr[end];arr[end] = temp;}
}

控制台结果:

在这里插入图片描述

代码详解:代码中的重点就是buileTree这个函数如何将数组变成大顶堆了
(1)首先找到二叉树的第一个非叶子节点,数组下标为arr.length/2-1(为什么是arr.length/2-1,自己话一个三四层的完全二叉树验证一下,注意下标是从0开始的)
(2)这个非叶子节点下标之前的节点一定都是非叶子节点,非叶子节点一定都有叶子(可能只有左叶子,可能左右叶子都有,不可能只有右叶子),我们只要保证所有的节点的父节点一定比子节点的值大就行了,也就是说左右节点的值谁大谁小无所谓,但是父节点的值一定比子节点的值大,所以我们在父节点和两个子节点这三个值之间找出最大的值放在父节点处就ok了。
(3)buildTree函数里面第一个for循环控制遍历所有的非叶子节点。当遍历到一个非叶子节点时我们要做什么操作呢?第一个if判断节点i是否有右叶子节点,嵌套里面的if判断如果有右叶子节点,那么将左右叶子节点的值进行比较,大的值放在左叶子节点;下面的if是将左叶子节点与其父节点进行比较(这时候就没有右叶子节点的事了),大的值放在父节点i中,这样就完成了父节点、左右节点三个值的比较并且把最大的值放在了父节点中,遍历完所有的非叶子节点,此时根节点存放的就是最大的值,而根节点的位置是arr[0].

参考: https://www.cnblogs.com/liuqiyun/p/9415003.html

9.计数排序

计数排序的思想:找出所有元素中的最大值,然后申请一个长度为最大值+1的数组空间,然后将待排序数遍历,将遍历的每一个值存入与其相等的新数组的下标所在的位置,而新数组的值就是该下标值出现的次数。

举个例子:
(1)比如说有数组arr={5,3,5,2,8},排序的时候首先找出最大值8,然后申请一个长度为8+1=9的数组newarr[],自动初始化全为0;
(2)接着遍历arr数组,第一个遍历arr[0]=5,就将newarr[5]的值+1,表示5出现一次;
(3)继续遍历,第二个遍历arr[1]=3,将newarr[3]的值+1;
(4)依次遍历arr数组,最终newarr={0,0,1,1,0,2,0,0,1};
(5)最后将newarr数组转化成正确的排序顺序;

图解:

在这里插入图片描述

Java代码实现:

package package_3;
import java.util.Arrays;
public class CountSort 
{public static void main(String[] args) {int[] arr = {49,38,65,97,76,13,27,49,55,4};int max = getMax(arr);int[] temp = new int[max+1];sort(arr,temp);System.out.println(Arrays.toString(arr));}//给定int数组,返回数组中的最大值maxstatic int getMax(int[] arr) {int max = arr[0];for(int i=1;i<arr.length;i++){if(arr[i]>max){max = arr[i];}}return max;
}//进行排序的函数static void sort(int[] arr, int[] temp){//遍历arr数组,数组temp计数for(int i=0;i<arr.length;i++){temp[arr[i]]++;}int i = 0;//将temp数组转换成正确的顺序存回arr数组for(int j=0;j<temp.length;j++){if(temp[j]>0){for(int m=1;m<=temp[j];m++){arr[i] = j;i++;}}}}
}

结果:
在这里插入图片描述

代码详解:
(1)这里定义了两个函数,一个是找出数组中的最大值,另一个是将arr数组进行排序。
(2)Sort函数中,遍历数组的同时在temp数组中计数,这里注意arr数组的值对应temp数组的下标,因为下标是有序的,所以当arr数组转换成temp数组时,也就是在对arr数组中的值进行排序。Temp数组中存储的是对应位置的下标值在arr数组中出现的次数。
(3)将temp数组转换成有序的并且存回arr数组时,遍历temp数组,值>0表示该位置下标值存在于arr数组中,值为几就表示位置下标值在arr数组中出现了几次。
(4)如果是升序排列,就从前往后遍历temp数组;如果是降序排列,就从后往前遍历temp数组;

计数排序的局限性:
(1)如果我要排的数如果我要排的数据里有0呢? int[]初始化内容全是0,排毛线。
(2)如果我要排的数据范围比较大呢?比如[1,9999],我排两个数你要创建一个int[10000]的数组来计数?
对于第一个bug,我们可以使用偏移量来解决,比如我要排[-1,0,-3]这组数字,这个简单,我全给你们加10来计数,变成[9,10,7]计完数后写回原数组时再减10。不过有可能也会踩到坑,万一你数组里恰好有一个-10,你加上10后又变0了,排毛线。
对于第二个bug,确实解决不了,如果是[9998,9999]这种虽然值大但是相差范围不大的数据我们也可以使用偏移量解决,比如这两个数据,我减掉9997后只需要申请一个int[3]的数组就可以进行计数。
由此可见,计数排序只适用于正整数并且取值范围相差不大的数组排序使用,它的排序的速度是非常可观的。

10.桶排序

桶排序就是对计数排序的一个升级,计数排序就相当于每一个数据一个桶,相同的数据放在同一个桶中,应该属于特殊的桶排序。当数据差很大时,直接使用计数排序需要开辟很大的一块空间,简直就是浪费!所以我们将数据按照区间分在一个一个桶中(比如数据为19放在一个桶中,1019放在另一个桶中……)。每个桶中进行排序,最后再将所有的桶按照顺序连接起来,就完成了排序。

Java中可以使用Arraylist来表示桶。Arraylist内部也是由数组实现的,大小可变,有序,数据可重复(因为前两天刚刚学习java的集合框架,ArrayList实现了Collection、List接口),这里我们用到Arraylist的add()方法和get()方法完成存取数据就可以了。

Java代码实现:

 package package_3;import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;class TongSort
{public static void main(String[] args){int[] arr = {49,38,65,97,76,13,27,49,55,4,0};//创建10个桶,并将桶保存在ArrayList表list中,list表中存放的是ArrayList类型的数据ArrayList<ArrayList> list = new ArrayList<ArrayList>() ;for(int i=0;i<10;i++){list.add(new ArrayList());}//遍历arr数组,将元素分桶store(arr,list);//每个桶内部进行排序sort(arr,list);//打印数组查看结果System.out.println(Arrays.toString(arr));   }/** 遍历arr数组,将元素存入对应的桶中*/private static void store(int[] arr, ArrayList<ArrayList> list) {for(int i=0;i<arr.length;i++){//数据为0-9存放在list.get(0)表中//数据为10-19存放在list.get(1)表中//依次类推……list.get(arr[i]/10).add(arr[i]);}   }/** sort方法对每一个桶中的数据进行排序*/private static void sort(int[] arr, ArrayList<ArrayList> list){//count来保存arr数组下标,因为这里我们排好一个桶之后就将该桶中的有序序列//直接放入arr数组中,然后继续排下一个桶int count =0;// 遍历每一个桶,对桶中元素排序for(int i=0;i<list.size();i++){//桶中的元素不止一个,则排序;否则不用排序if(list.get(i).size()>=1){//类Collections提供的Sort方法可以将list类型的数据按照字典顺序排序//也可以自己定义比较器comparator,此时就将按照比较器定义的方法排序Collections.sort(list.get(i));//桶内排序完成之后就将有序数列存入arr数组for(int j=0;j<list.get(i).size();j++){arr[count] = (int) list.get(i).get(j);count++;}}}}
}

结果:
在这里插入图片描述

11.基数排序

基数排序是对桶排序的升级,基数排序不管你数据量大小,数据宽度多大,个位十位百位提取以后就是0-9,所以我们定义10个桶完全就够了,也不需要考虑桶排序的区间划分问题。

计数排序的方法:
(1)创建10个桶,标号0-9
(2)根据arr数组中数据的个位进行一次升序排序,也就是说我只看arr数组中数据的 各位数,十位百位是多少都不管,各位数小的就排在前面,各位数大的就排在后 面。比如说231排在123前面。
(3)然后再根据arr数组中十位数的大小进行一次升序排序(注意此时arr是根据个位 排序过后的新的arr)。
(4)直到根据最高位的大小排序后,才算结束,此时就是有序的数列

基数排序的理解:
为什么要依次根据个位十位百位排序呢?为什么不根据百位划分出组,然后再根据十位划分出组,然后组内排序呢?
答:首先,如果根据百位划分出组,组内再继续划分其实这个思想就是桶排序,跟桶排序一样的思想。桶排序的思想就是划分有序的区间,元素属于哪个桶就放入哪个桶中,桶中排序好后,有序桶连接在一起就是完整的排序,先根据百位排序就相当于区间划分成了100而已,实质上就是桶排序。

而先根据个位排序其实就是进行微调,因为比较两个数大小,不管你个位数谁大谁小,谁十位数大,谁就是大的;不管你十位数大小,谁百位数大谁就是大的;不管你百位数大小,谁千位数大,谁就是大的。所以最后谁大谁小还是根据最高位来判断的,最高位相同怎么办,那就根据次高位呗,次高位相同怎么办,那句根据次次高位判断呗。所以从低位开始排序实际上就是进行微调,是为了解决高位相同时大小的比较。但是最终元素大小的决定权还是在高位。

Java代码实现:

package package_3;import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;public class JiShuSort {public static void main(String[] args) {int[] arr = {133,124,563,345,895,329,8862,3249,1234};//创建包含10个桶的列表listArrayList<ArrayList> list = new ArrayList<ArrayList>() ;for(int i=0;i<10;i++){list.add(new ArrayList());}//按照个位排序int[] temp = new int[arr.length];for(int i=0;i<arr.length;i++){//提取出个位放入temp数组temp[i] = arr[i]%10;}//将arr数组的元素存入相应的桶中store(arr,temp,list);//对每个桶中的元素排序,并重新存入arr数组sort(arr,list);//清空桶中的所有数据,以便下一次使用clearTong(list);System.out.println(Arrays.toString(arr));//按照十位排序for(int i=0;i<arr.length;i++){//提取出十位放入temp数组temp[i] = (arr[i]%100)/10;}store(arr,temp,list);sort(arr,list);clearTong(list);System.out.println(Arrays.toString(arr));//按照百位排序for(int i=0;i<arr.length;i++){//提取出百位放入temp数组temp[i] = (arr[i]%1000)/100;    }store(arr,temp,list);sort(arr,list);clearTong(list);System.out.println(Arrays.toString(arr));//按照千位排序for(int i=0;i<arr.length;i++){temp[i] = (arr[i]%10000)/1000;  }store(arr,temp,list);sort(arr,list);clearTong(list);System.out.println(Arrays.toString(arr));}/** 清空桶*/private static void clearTong(ArrayList<ArrayList> list) {for(int i=0;i<list.size();i++){list.get(i).clear();}   }/** 遍历arr数组,将元素存入对应的桶中*/private static void store(int[] arr,  int[] temp, ArrayList<ArrayList> list) {//获取只保存个位数的数组temp//遍历temp数组,根据各位数将arr数组分桶for(int i=0;i<temp.length;i++){list.get(temp[i]).add(arr[i]);}}/** sort方法对每一个桶中的数据进行排序*/private static void sort(int[] arr, ArrayList<ArrayList> list){//count来保存arr数组下标,因为这里我们排好一个桶之后就将该桶中的有序序列//直接放入arr数组中,然后继续排下一个桶int count =0;// 遍历每一个桶,对桶中元素排序for(int i=0;i<list.size();i++){//桶中的元素不止一个,则排序;否则不用排序if(list.get(i).size()>=1){//类Collections提供的Sort方法可以将list类型的数据按照字典顺序排序//也可以自己定义比较器comparator,此时就将按照比较器定义的方法排序Collections.sort(list.get(i));//桶内排序完成之后就将有序数列存入arr数组for(int j=0;j<list.get(i).size();j++){
//                  System.out.println(count);
//                  System.out.println((int) list.get(i).get(j));arr[count] = (int) list.get(i).get(j);count++;}}}}
}

控制台结果:
在这里插入图片描述

效率比较:

本人没有对复杂度进行分析,感兴趣的朋友可以仔细的分析一下。

在这里插入图片描述

稳定性的理解:相同的元素排序前后位置的对比。假如一个int数组中有两个数据a1=a2;排序前a1在a2前面,排序后a1仍然在a2前面则是稳定的;否则就是不稳定的!

若有不足,欢迎指正。

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

相关文章

  1. python日记Day15——Pandas之入门

    python日记——Pandas之入门Pandas库的介绍 1、Pandas是Python第三方库,提供高性能易用数据类型和分析工具,Pandas基于NumPy实现,常与NumPy和Matplotlib一同使用; 2、Pandas包含两种数据类型:Series, DataFrame,基于上述数据类型有各类操作:基本操作、运算操作、特征类操…...

    2024/4/13 23:38:02
  2. 大学生村官培训大会圆满落幕

    原标题:大学生村官培训大会圆满落幕10月14日,大学生村官培训大会在电子商务产业园圆满落幕,本次培训由市委组织部王文丑副科长主讲,以“弘扬玉兰精神,争做群众满意的大学生村官”为主题,对70名邢台市区大学生村官进行了为期两天一夜的体验式培训会。 总裁在培训大会中寄语…...

    2024/3/22 6:39:46
  3. pytest之安装和使用插件

    安装第三方插件 pip可以可以轻松完成安装第三方插件,如果安装了插件,可以pytest自动查找并集成它,则无需激活它。 pip install pytest-NAME pip uninstall pytest-NAME一些流行的插件的注释列表: pytest-django:使用pytest集成为django应用编写测试。 pytest-twisted:为扭…...

    2024/3/22 11:59:37
  4. 1013.windows平台下移植qtmqtt三方库

    windows平台下移植Qt版本qtmqtt 1 下载qtmqtt源码git clone https://github.com/qt/qtmqtt2 安装perl软件http://strawberryperl.com/ 网站下载 strawberry-perl-5.22.1.3-64bit.msi3 安装vs2015, 安装Qt vs版本5.10.1如果已经安装可以省略 4 打开开始菜单栏中在此vs2015终端…...

    2024/4/1 5:28:56
  5. 【七号空间只选最好】欧风精品,环保来威漆

    原标题:【七号空间只选最好】欧风精品,环保来威漆健康是人生活的基本追求,环保装修是室内家居健康的基础。为了从根源上避免装修污染,为了“让业主不再为装修而烦恼”七号空间装饰整合一线品牌,只选最好! 今天介绍一下七号空间好材料之【欧风精品,环保来威漆】! 品 牌…...

    2024/4/13 17:45:33
  6. heep1.1为什么要使用长连接

    heep1.0是短连接,heep1.1才有长连接的,而且长连接是指TCP长连接,一个TCP连接可以传送多个请求和响应,避免了频繁建立和销毁连接,降低消耗和延迟。注意长连接并不是永久连接,如果一段时间内没有http请求,长连接就会断掉。参考文章:https://juejin.im/post/5e5b50eb6fb9a…...

    2024/3/27 6:44:26
  7. Facebook不可逾越的10条红线

    原标题:Facebook不可逾越的10条红线1、注册Facebook的时候最好使用邮箱注册,不要用手机注册。因为涉及到解封账号的问题,邮箱会比手机方便得多。 2、过多不同的IP地址登陆同一个账号,会导致账号涉及登陆安全问题而被限制使用。 3、需要填写“真实的”身份信息,这里的真…...

    2024/3/22 11:59:34
  8. 卫小宝doki,1号专线相继亮相深圳礼品展

    原标题:卫小宝doki,1号专线相继亮相深圳礼品展近两年随着智能穿戴设备的兴起,人们对智能产品的关注度也在一步步提高。这也是互联网时代的一次革命,人类正在向智能生活的方式迈进。 2016年10月20至23日,第二十四届中国(深圳)国际礼品及家居用品展览会在深圳会展中心举办。…...

    2024/3/22 11:59:32
  9. 原创一个新的临床概念——心房衰竭

    原标题:一个新的临床概念——心房衰竭作者: 姚佐北 心房功能不全往往被我们当做其他心脏疾病的表现或所导致的结果,而不是当做独立的病因。近年来在心脏电生理和影像学上的进展帮助我们更好的了解了心房复杂的解剖学和功能特点。作为许多患者主要的病因或症状恶化的因素,需…...

    2024/4/22 9:23:42
  10. 痛风 、劳损性疾病、拇指腱鞘炎、骨折怎么办?川派医生集团一一破解

    原标题:痛风 、劳损性疾病、拇指腱鞘炎、骨折怎么办?川派医生集团一一破解痛风 、劳损性疾病、拇指腱鞘炎、骨折 如何破解?川派医生集团补救措施更高明! 一、 痛风 痛风是一种由于嘌呤生物合成代谢增加,尿酸产生过多或因尿酸排泄不良而致血中尿酸升高,尿酸盐结晶沉积在…...

    2024/3/22 11:59:30
  11. 男女到底相差几岁,结婚最合适呢?太准了!

    原标题:男女到底相差几岁,结婚最合适呢?太准了!“那些20岁出头的小男生只能是和你玩玩而已,真以为能给你什么生活保证和幸福吗?若干年后他只会使你受伤害,连他自己都没有想过要在30岁之前结婚,就算他想结婚也不具备基本条件。” 调查研究表明:在我国的大中城市里, 换一…...

    2024/3/28 22:20:41
  12. 守住本心 当好人民公仆

    原标题:守住本心 当好人民公仆近日,人称“三怪”副市长的广州副市长曹鉴燎落马,法院审理查明,曹鉴燎利用职务之便,为他人谋利益,个人或伙同他人共同索取或收受财物共计超过8000万元。法院对犯受贿罪的曹鉴燎判处无期徒刑,罚金250万元,并对其以及其子名下多套房产予以没…...

    2024/4/19 7:36:33
  13. 葡超竞彩足球分析:塞图巴尔值得看好

    原标题:葡超竞彩足球分析:塞图巴尔值得看好竞彩足球周一012:塞图巴尔VS博阿维斯塔 比赛时间:2019-5-7 星期二 03:15 欧洲指数:2.28 3.10 3.15 亚洲盘口:1.00 平/半 0.88 球队近况: 塞图巴尔上轮联赛客场0-0战平辛达卡拉,还剩3轮领先降级区6分。本场如果能获胜就肯…...

    2024/3/22 11:59:29
  14. 吴梵子:黄金1325附近多,黄金开启反弹之路

    原标题:吴梵子:黄金1325附近多,黄金开启反弹之路市场消息分析:昨日美元持续上涨,黄金刷新本月低位,但终在欧美盘反弹至1330附近,此外,欧洲央行决策者可能在周四的政策会议上暗示,将采取更谨慎的立场,这一挥之不去的担忧也拉低欧元。 特朗普称5月12日是修改伊核协议…...

    2024/3/22 11:59:27
  15. 原创玫瑰馒头最简单的做法,造型耐看口感劲道,家里孩子不舍入口

    原标题:玫瑰馒头最简单的做法,造型耐看口感劲道,家里孩子不舍入口吃腻了普通的馒头?不如来蒸一些玫瑰吧! 宅在家里的特殊日子,生活要有仪式感。做了可以吃的玫瑰花馒头,十分简单,也算是给生活添加点乐趣。 我用的是一次性发酵的方法,别看这玫瑰花造型花哨,其实花费…...

    2024/4/17 17:33:11
  16. 新生儿护理|基础篇

    原标题:新生儿护理|基础篇原创 @十一妈咪爱 更多精彩内容请关注微信号:shiyi_mamiai 一、新生儿日常护理 环境护理室内温度保持在22~24℃左右,湿度以50%~60%为宜,室内多通风,保持空气流通房间在进行换气的时候,妈妈和新生儿可以暂时离开通风的房间,等到室内的空气更…...

    2024/4/2 21:27:42
  17. 怎么联系到明星?怎么联系到经纪人?

    原标题:怎么联系到明星?怎么联系到经纪人?想找明星代言怎么联系到明星经纪人? 企业想找明星怎么找到经纪人电话? 演出需要找明星怎么联系? 加微信809638848 怎么联系到明星的经纪人? 想找明星代言明星商演怎么与明星经纪人取得联系? 我想找明星代言,要怎么找怎么…...

    2024/4/11 0:34:05
  18. 掌握御龙术的少女运气不会太差| 深V电影

    原标题:掌握御龙术的少女运气不会太差| 深V电影微信ID:v_movier 感悟人生,只需一刻钟 其实吧,看到这个题目,你们大概也猜到我们今天要聊什么片子了。 恩,就是这部 《他是龙》 虽然片子很早之前就可以在网上看到了,但是最近在院线上映,V姐深深地觉得,对于广大追求颜…...

    2024/3/23 17:53:06
  19. 岩田喷枪用途广 深圳金源恒资质深

    原标题:岩田喷枪用途广 深圳金源恒资质深随着世界一体化进程的推进,我国经济迅猛发展,各行各业呈现一片繁荣的势头。经济的发展推动了技术的进步,行业间对技术的需求也不断提升。在历史不断的发展历程中,行业间始终遵循着优胜劣汰的自然规律,在长期的探索中,我们也不难得…...

    2024/4/23 17:43:56
  20. 别人倒茶给你为何一定要敲三下桌面?

    原标题:别人倒茶给你为何一定要敲三下桌面?别人给我们倒茶的时候,经常看到有些人会敲三下桌面,这其实是中华茶道中的一种礼仪! 不管你喝不喝茶,都必须有所了解!主要分以下几种: 1.长辈给晚辈倒茶:这时,晚辈应将右手握拳,拳背朝上,用五指轻敲桌面。一般敲三下即可…...

    2024/3/28 18:22:44

最新文章

  1. uthash哈希库使用详解(增删改查和遍历,示例代码)

    在C语言中&#xff0c;标准库并没有提供哈希表的实现&#xff0c;因此很多开发者需要自己实现哈希表&#xff0c;这通常是一个复杂且容易出错的过程。幸运的是&#xff0c;有像uthash这样的开源库可以帮助我们简化这一过程。本文将对uthash的使用进行详尽的讲解&#xff0c;包括…...

    2024/4/23 21:01:39
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. cocos 数字滚动、数字过渡动画

    代码&#xff1a; //数字滚动 let sdk: any { a: start_score, } tween(sdk).to(1, { a: this.score }, { progress: (start, end, current, time) > { // this.lab.string Math.round(start (end - start) * time) ;//修改页面上的值 // console.log(修改ing, start (…...

    2024/4/20 10:37:54
  4. Verilog基础【二】

    3.1 Verilog 连续赋值 关键词&#xff1a;assign&#xff0c; 全加器 连续赋值语句是 Verilog 数据流建模的基本语句&#xff0c;用于对 wire 型变量进行赋值。&#xff1a; assign LHS_target RHS_expression &#xff1b;LHS&#xff08;left hand side&#xff09;…...

    2024/4/23 6:10:22
  5. 【Easy云盘 | 第十三篇】分享模块(获取目录信息、获取文件信息、创建下载链接)

    文章目录 4.4.7获取目录信息4.4.8获取文件信息4.4.9创建下载链接 4.4.7获取目录信息 明天做 4.4.8获取文件信息 明天做 4.4.9创建下载链接 明天做...

    2024/4/23 6:21:55
  6. 【外汇早评】美通胀数据走低,美元调整

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

    2024/4/23 20:58:27
  7. 【原油贵金属周评】原油多头拥挤,价格调整

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

    2024/4/23 13:30:22
  8. 【外汇周评】靓丽非农不及疲软通胀影响

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

    2024/4/23 13:28:06
  9. 【原油贵金属早评】库存继续增加,油价收跌

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

    2024/4/20 23:26:47
  10. 【外汇早评】日本央行会议纪要不改日元强势

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

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

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

    2024/4/19 11:57:53
  12. 【外汇早评】美欲与伊朗重谈协议

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

    2024/4/23 13:29:53
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

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

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

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

    2024/4/23 13:28:42
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

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

    2024/4/21 20:01:37
  16. 【外汇早评】美伊僵持,风险情绪继续升温

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

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

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

    2024/4/23 13:27:46
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

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

    2024/4/23 13:47:22
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

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

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

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

    2024/4/19 11:59:44
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

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

    2024/4/23 13:28:08
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

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

    2024/4/23 13:29:47
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

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

    2024/4/23 13:28:14
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

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

    2024/4/23 13:27:51
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

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

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

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

    2022/11/19 21:17:18
  27. 错误使用 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
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,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
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:16:58
  45. 如何在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