2013年4月19日星期五

冒泡排序,选择排序,插入排序的排序算法

<?php

    
//冒泡排序,小>>大,核心思想:
    //内层循环,相邻的数进行比较,较大的数被交换到靠后的位置,实现最大数在最后
    //外层循环,每次循环减少一个参与循环的数,因为最大数已经在最后
    
function bubblesort(&$arr){
        
$tansf=0;  //定义中间变量
        
for($i=0;$i<count($arr)-1;$i++){
            for(
$j=0;$j<count($arr)-1-$i;$j++){
                if(
$arr[$j]>$arr[$j+1]){
                    
//如果前面的数大于后面的数,进行交换
                    
$tansf =$arr[$j];
                    
$arr[$j] =$arr[$j+1];
                    
$arr[$j+1] =$tansf;
                }
            }
        }
    }


    
//选择排序,小>>大,核心思想:
    //内层循环,找出剩下的数中最大数
    //外层循环,最大数跟剩下数中最后一个交换,实现最大数在最末
    
function selectionsort(&$arr){
        for(
$i=0;$i<count($arr)-1;$i++){
            
$max=$arr[0];  //假设arr[0]是最大数
            
$p=0;  //定义一个指针,指向最大数的下标
            
for($j=1;$j<count($arr)-$i;$j++){
                if(
$max<$arr[$j]){
                    
//保持$max是最大数
                    
$max=$arr[$j];
                    
$p=$j;
                }
            }
        
//把比较数列中最后一个数和最大数进行交换
        
$arr[$p]=$arr[count($arr)-1-$i];
        
$arr[count($arr)-1-$i]=$max;      
        }
    }

    
//插入排序,小>>大,核心思想:
    //默认数组第一个数是有序数列,剩下的是无序数列
    //内层循环,执行比较,插入数找到合适位置,插入数后面的有序数列位置后移1
    //外层循环,无序数列的第一个数作为插入数,放在有序数列的合适位置
    
function insertionsort(&$arr){
        for(
$i=1;$i<count($arr);$i++){
            
$insertval=$arr[$i];  //当前数为要插入的数
            
$p=$i-1;  //要比较的数的位置比当前数靠前
            
while($p>=&& $insertval<$arr[$p]){
                
//只要插入数小于被比较的数,被比较的数就后移一位,挪位给插入数
                
$arr[$p+1]=$arr[$p];
                
//指针指向前一位置
                
$p--;
            }
            
//找到合适位置,插入
            
$arr[$p+1]=$insertval;
        }
    }

    
$arr=array(5,20,3,2,15,9,100,-3,99,23);
    
bubblesort($arr);
    
//selectionsort($arr);
    //insertionsort($arr);
    
print_r($arr);
?>

没有评论:

发表评论