快速法排序(6)

2020-06-30 11:00

31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

/**

* 快速排序 */

//以下注释的为错误代码,原版主也不进行验证就发布,害人不浅啊!其它语言的 //排序算法没有验证,不知道是否正确! /*

function quick_sort($array) {

$len = count($array); if($len <= 1) {

return $array; }

$left_array = array(); $right_array = array(); $key = $array[0];

for($i=1; $i<$len; $i++) {

if($key < $array[$i]) {

$right_array[] = $array[$i]; }else {

$left_array[]=$array[$i]; }

$first_array = array_merge($left_array,array($key),$right_array); }

return $first_array; }

$just = array(49,38,97,76,13,27); for($j=0; $j<6;$j++) {

static $array1 ; static $array;

$array1 = quick_sort($just); $array = quick_sort($array1); }

print_r($array); */

PHP,递归快排 1 function quick_sort($arr){ 2 _quick_sort($arr,0,(count($arr)-1)); 3 return $arr; 4 }

5 function _quick_sort(&$arr,$i,$j){ 6 $pivot = $arr[$i]; 7 $_i = $i; 8 $_j = $j; 9 while($i<$j){ 10 while($arr[$j]>=$pivot && $i<$j) $j--; 11 if($i<$j){ 12 $arr[$i] = $arr[$j]; 13 $i++; 14 } 15 while($arr[$i]<=$pivot && $i<$j) $i++; 16 if($i<$j){ 17 $arr[$j] = $arr[$i]; 18 $j--; 19 } 20 } 21 $arr[$i]=$pivot; 22 if($_i<$i-1){ 23 _quick_sort($arr,$_i,$i-1); 24 } 25 if($_j>$i+1){ 26 _quick_sort($arr,$i+1,$_j); 27 } 28 } FORTRAN 1 recursive subroutine quicksort(item,s,t) 2 implicit none 3 integer(4),intent(inout):: item(:) ! 整数序列,程序结束时已按从小到大的顺序排列完毕 4 integer(4),intent(in):: s,t ! 分别为整数序列的起始和终了下标 5 integer(4) k ! 枢轴的下标 6 if(s .lt. t) then 7 call quickpass(item,s,t,k) 8 call quicksort(item,s,k - 1) 9 call quicksort(item,k + 1,t) 10 endif 11 end subroutine 12 !*** 一趟快速排序*** 13 subroutine quickpass(item,s,t,k) 14 implicit none 15 integer(4),intent(inout):: item(:) ! 整数序列,程序结束时已分割完毕 16 integer(4),intent(in):: s,t ! 分别为整数序列的起始和终了下标 17 integer(4),intent(out):: k ! 程序结束时为枢轴的下标 18 integer(4)pivot ! 枢轴元素 19 integer(4)i,j ! 下标变量

20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41

!--- 选取枢轴元素 ---

pivot = item(s) ! 简单地取第一个元素为枢轴。为避免蜕化还可以选中间大小的 //元素为枢轴

!--- 把整数序列按枢轴分割成两部分 --- i = s j = t

do while(i .lt. j)

do while(i .lt. j .and. item(j) .ge. pivot) j = j - 1 enddo

item(i) = item(j)

do while(i .lt. j .and. item(i) .le. pivot) i = i + 1 enddo

item(j) = item(i) enddo

! 重新安放枢轴的位置 item(i) = pivot k = i

!--- 打印出每一趟排序后的状态 --- print 10,pivot,item

10 format('Pivot = ',i2,':',i4/) end subroutine javascript 1 var quickSort = function(array){ 2 var arr = array; 3 var i = 0; 4 var j = arr.length-1; 5 var qSort = function(i,j){ 6 if( i == j ){ return }// 当前组仅有一个元素则结束 7 var ai = arr[i];//取出的主元 8 var ii = i;//记录i的开始位置 9 var jj = j;//记录J的开始位置 10 while( i < j ){ 11 // j <------- 12 if( arr[j] >= ai){ 13 j--; 14 }else{ 15 arr[i] = arr[j]; 16 i++; 17 while( i < j){ 18 if(arr[i] > ai){ 19 arr[j] = arr[i]; 20 break;

21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

}else{ i++; } }

var k = arr[i]; } }

if( ii == i){

qSort(++i,jj); return ; }

arr[i] = ai;

qSort(ii,i);//第一组排序 qSort(j,jj);//第二组排序 //--- }

qSort(i,j); return array; }

alert(quickSort([54,61,8,7,4,6,84,94,94,654,13,456,7981,7,465,79,16,49]));

此javascript脚本来自博客园idche javascript,标准版本 1 var list=new Array(93,1,7,9,8,3,10,33,79,45,32,11,0,88,99,12,4,66,64,31,100,78); 2 document.write(sort(list).valueOf()); 3 function sort(arr){ 4 return quickSort(arr,0,arr.length-1); 5 // 快排函数 6 function quickSort(arr,l,r){ 7 if(lmid); 12 if(i>=j)break; 13 var temp=arr[i]; 14 arr[i]=arr[j]; 15 arr[j]=temp; 16 } 17 quickSort(arr,l,i-1); 18 quickSort(arr,j+1,r); 19 } 20 return arr; 21 } 22 }

23 24

// PS:浏览到快排发现第一个 idche 版本过于复杂,故自己补了个标准快排方法, //希望能帮助同学们理解。 // by Alexi.X

AAuto 1 /* 2 *------------------------------------------------------- 3 * 快速排序 4 *------------------------------------------------------- 5 */ 6 io.print(\7 io.print(\快速排序(交换类排序基于分治法 )\8 io.print(\9 parttion = function(array,from,to){ 10 //选定主元(pivot element) 11 var x = array[to]; 12 var left = from-1; 13 for(j=from;to-1){ 14 //如果比主元小 15 if(array[j]<=x){ 16 //互换,小的去左边 17 left++; 18 var lt = array[j]; 19 array[j] = array[left]; 20 array[left] = lt; 21 } 22 } 23 //主元移中间 24 var pivot = left+1; 25 var temp = array[pivot]; 26 array[pivot] = array[to]; 27 array[to] = temp 28 return pivot; 29 } 30 //快速排序的随机版本 31 rand_parttion = function(array,from,to){ 32 var pivot = math.random(from,to); 33 var temp = array[pivot]; 34 array[pivot] = array[to]; 35 array[to] = temp 36 return parttion(array,from,to) 37 } 38 quick_sort = function(array,from,to){ 39 if(from


快速法排序(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018年选调小学数学教师进城试卷

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: