当前位置: 首页 > 后端技术 > PHP

纯属娱乐——快写快速排序

时间:2023-03-30 01:23:46 PHP

快速排序快速排序,应用分而治之的思想,选择一个中间值,比它小的放在左边,比它大的放在左边比它在右边,然后调整这个将相同的方法应用于两个组,递归地。挖坑挖坑是快速回忆这个算法实现的形象名称。如果有一个数组[-1,2,4,7,8,-7,6,20],挖出第一个位置的值保存。现在有一个空坑,需要填入初始位置那时,i指向初始位置,j指向结束位置,现在i指向的地方有一个坑,j开始往前走,如果遇到的数小于中间值(这里-1),则将当前j到的位置数挖出来,填充i上的位置。现在j的位置是空的,此时i(+1后)开始活跃,向前跑。如果i指向的值比中间值(这里是-1)大,则挖出i指向的当前位置的数,填入j的位置,然后重复j的过程移动。上面的过程最终会遇到i和j(跳出循环点),恰好那里有一个空坑位置到中间值然后应用分而治之的策略,同样的方法用于剩下两组实现Java实现/***Quicksort*@paramarrint[]sortarray*@paramstartintstartposition*@paramendintendposition*/privatestaticvoidquickSort(int[]arr,int开始,intend){if(end-start==1){if(arr[start]>arr[end]){inttemp=arr[start];arr[开始]=arr[结束];arr[结束]=温度;}}elseif(end-start>1){intmiddle=arr[start];inti=开始;intj=结束;while(i!=j&&i<=end&&j>=start){while(arr[j]>=middle&&j>i){j--;}if(j>i){arr[i]=arr[j];我++;}while(arr[i]<=middle&&iarr[end]){lettemp=arr[start];arr[开始]=arr[结束];arr[结束]=温度;}}elseif(end-start>1){letmiddle=arr[start];让我=开始;让j=结束;while(i!==j&&i<=end&&j>=start){while(arr[j]>=middle&&j>i){j--;}if(j>i){arr[i]=arr[j];我++;}尽管(arr[i]<=middle&&i$arr[$end]){$temp=$arr[$start];$arr[$start]=$arr[$end];$arr[$end]=$temp;}}elseif($end-$start>1){$middle=$arr[$start];$i=$开始;$j=$结束;while($i!==$j&&$i<=$end&&$j>=$start){while($arr[$j]>=$middle&&$j>$i){$j--;}if($j>$i){$arr[$i]=$arr[$j];$i++;}while($arr[$i]<=$middle&&$i<$j){$i++;}if($i<$j){$arr[$j]=$arr[$i];$j--;$arr[$i]=$middle;快速排序($arr,$start,$i-1);快速排序($arr,$i+1,$end);}}quickSort($arr,0,count($arr)-1);print_r($arr);