当前位置: 首页 > 科技观察

java常用的7大排序算法汇总

时间:2023-03-14 08:55:22 科技观察

java常用的7种排序算法总结一、插入排序算法插入排序的基本思想是在遍历数组的过程中,假设序号i[0..i-1]之前的元素已经排序,此行需要找到i对应的元素x的正确位置k,并在找到这个位置k的过程中,将比较过的元素一个一个移动,为元素x“腾出空间”,并赋值k到x对应的元素的值。一般来说,插入排序的时间复杂度和空间复杂度分别是O(n2)和O(1)。/***@paramint[]未排序数组*@returnint[]已排序数组*/publicint[]sortInsert(int[]array){for(inti=1;i=0&&temparr[miniPost]){inttemp;temp=arr[i];arr[i]=arr[miniPost];arr[miniPost]=temp;}}returnarr;}3.冒泡排序算法冒泡排序就是把比较大的数沉在下面,小的浮在上面/***@paramint[]unsortedarray*@returnint[]sortedarray*/publicint[]sortBubble(int[]array){inttemp;//***layerloop:表示比较的次数,比如length元素,比较的次数是length-1(当然不用跟自己比了)for(inti=0;ii;j--){if(array[j]=base){heigh--;}//base赋给当前高度位置,base在这里移动(交换),高度位置右侧大于baseswap(arr,heigh,low);while(low=1){for(inti=step;i=0&&temp=1;i--){swap(array,0,i);heapify(array,0,i);}returnarray;}privatevoidbuildHeap(int[]array){intn=array.length;//数组元素个数for(inti=n/2-1;i>=0;i--)heapify(array,i,n);}privatevoidheapify(int[]A,intidx,intmax){intleft=2*idx+1;//左孩子的下标(如果存在)intright=2*idx+2;//左孩子的下标(如果存在)intlargest=0;//求3个节点中值最大的节点的下标if(leftA[idx])largest=left;elselargest=idx;if(rightA[largest])largest=right;if(largest!=idx){swap(A,largest,idx);heapify(A,largest,max);}}}//堆建函数,认为[s,m]只有s//对应的关键字不符合大顶堆的定义,通过调整======================使[s,m]成为大顶堆======================================publicstaticvoidheapAdjust(int[]array,ints,intm){//使用0下标元素作为临时存储单元array[0]=array[s];//向下过滤thenodewithalargerchildfor(intj=2*s;j<=m;j*=2){//保证j是一个更大的子节点j