四基础排序算法:插入排序、选择排序、冒泡排序、快速排序

	/**
	 * 插入排序(Insertion Sort)的基本思想是:
	 * 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。
	 * 插入排序:就是把第一个数当成已排序还的序列,然后把后面的数一个一个插入到前面适当的位置
	 */
	function insert_sort($arr){
		//计算数组元素个数
		$total_count = count($arr);

		if($total_count <= 0) return 0;

		//从这里开始循环 从1开始,表示把序列的第一个元素当成有序序列
		for ($i = 1; $i < $total_count; $i++) {

			$current = $arr[$i];

			$j = $i - 1 ;
			//$current 在while循环里面,值一直没有变化,只是位置有变化
			while ($current < $arr[$j]) {
				$arr[$j+1] = $arr[$j] ;
				$arr[$j] = $current;
				$j--;
				if($j < 0) break;
			}
		}
		return $arr;
	}
	/**
	 * 选择排序(Selection Sort)的基本思想是:
	 * 每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。
	 * 选择排序:每次都选出最小的一个放在最前面,最开始的时候把第一个当做最小的
	 */
	function select_sort($arr){
		$total_count = count($arr);

		if($total_count <= 0) return 0;

		for ($i=0; $i < $total_count; $i++) { 

			//拿第一个后面的每一个与第一比,每次比完都是把小的放在第一个的位置 ,比完内层的这个for循环,就选出了最小的一个
			for ($j = $i + 1 ; $j < $total_count; $j++) { 

				$f = $i;

				if($arr[$f] > $arr[$j]){
					$f = $j;
				}
				if($f != $i){ //如果不等于,表示上一个if 发生了

					$temp = $arr[$i];

					$arr[$i] = $arr[$f];

					$arr[$f] =  $temp;
				}

			}
		}

		return $arr;
	}

	/**
	 * 冒泡排序的基本思想是:
	 * 两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止
	 */
	function bubble_sort($arr){

		$total_count = count($arr);

		for ($i=0; $i < $total_count; $i++) { 
			
			for ($j=$i+1; $j < $total_count; $j++) { 
				
				if($arr[$i] > $arr[$j]){

					$tmp = $arr[$i];
					$arr[$i] = $arr[$j];
					$arr[$j] = $tmp;
				}
			}
		}

		return $arr;
	}

	 /**
	  * 看看就会明白
	  */
	 function quick_sort($arr){
	 	
	 	$total_count = count($arr);

	 	if($total_count <= 1) return $arr;

	 	$middle = $arr[0];
	 	$left_arr = $right_arr = array();
	 	for ($i=1; $i < $total_count; $i++) { 
	 		
	 		if($arr[$i] > $middle){

	 			$right_arr[] = $arr[$i];

	 		}else{

	 			$left_arr[] = $arr[$i];
	 		}
	 	}
 		$left_arr = quick_sort($left_arr);
 		$right_arr = quick_sort($right_arr);

	 	return array_merge($left_arr , array($middle) , $right_arr);
	 }

参考:http://www.nowamagic.net/librarys/veda/detail/761

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注