本文共 1469 字,大约阅读时间需要 4 分钟。
选择排序:
基本思想: 每一趟从待排序的数据元素中选择一个最值作为首元素$arr = array(3, 1, 4, 7);function selection_sort($arr){ // 外层循环的轮数 for ($i = 0, $len = count($arr); $i < $len - 1; $i++) { for ($j = $i + 1; $j < $len; $j++) { // 伪代码: 交换两个位置的元素 swap($i, $j); } } return $arr;}
选择排序改进:
$arr = array(3, 1, 4, 7);function advanced_selection_sort($arr){ for ($i = 0, $len = count($arr); $i < $len - 1; $i++) { $min = $i; // $min 中存放的将是最值(本例是最小值)下标 for ($j = $i + 1; $j < $len; $j++) { if ($arr[$j] < $arr[$min]) { $min = $j; } } // 进行交换,如果 $min 发生变化,则交换 if($min != $i) { // 伪代码实现 swap($arr[$min], $arr[$i]); } } return $arr;}
冒泡排序:
基本思想: 对相邻的元素进行两两比较,根据需要交换,每一趟将一个最值"浮动"到顶端,最终完成排序。$arr = array(3, 1, 4, 7);function bubble_sor($arr){ for ($i = 0, $len = count($arr); $i < $len - 1; $i++) { $flag = true; // 如果有一轮排序中,没有发生交换,则元素已经是正确的顺序,排序结束。 for ($j = 0; $j < $len -1 - i; $j++) { // 伪代码实现 swap($arr[$j], $arr[$j + 1]); flag = false; } if (flag) { break; } } }
插入排序:
#define LEN 5int a[LEN] = {1, 5, 4, 2, 3};void insertion_sort(void){ int i, j, key; // 从 1 到 LEN 每次取一张牌 for(j = 1; j < LEN; j++) { printf("%d, %d, %d, %d, %d\n", a[0], a[1], a[2], a[3], a[4]); key = a[j]; i = j - 1; // 将已有的牌排好序 while(i >= 0 && a[i] > key) { a[i + 1] = a[i]; i--; } // 将取到牌插入 a[i + 1] = key; } printf("%d, %d, %d, %d, %d\n", a[0], a[1], a[2], a[3], a[4]);}int main(void){ insertion_sort(); return 0;}
转载地址:http://bjuzz.baihongyu.com/