排序算法总结

选择排序

思想

  • 一开始的数据都看作待排序数据。
  1. 找到数组中最小的那个元素

  2. 将最小的这个元素和数组中第一个元素交换位置

  3. 在剩下的元素中找到最小的的元素,与数组第二个元素交换位置

  • 从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)、(3)步,直到排序结束。

因此我们可以发现,简单选择排序也是通过两层循环实现。

  1. 第一层循环:依次遍历序列当中的每一个元素
  2. 第二层循环:将遍历得到的当前元素依次与余下的元素进行比较,符合最小元素的条件,则交换。

代码实现

插入排序

思想

把一个数组分为前后两种元素,前面的为已经排好序的元素,后面的为没有排序的元素。每次排序都把后面的元素一次和前面排好序的元素做比较,若比前面元素小,则交换位置,若前面还有元素,继续比较。若比前面元素大,则终止比较

代码实现

function insertSort($arr){

	$count = count($arr)
    for ($i=1;$i<$count;$i++){
        for ($j=$i-1;$j>=0;$j--){
            if ($arr[$j]>$arr[$j+1]){
                $temp = $arr[$j];
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $temp;
            }else{
                break; //当未排序的元素大于排序元素时,就不用比较了
            }
        }
    }

    return $arr;
}

冒泡排序

思想

元素按照顺序两两比较,若小于前面的元素则交换。

function bubbleSort($arr)
{
    $count = count($arr);
    for ($i = 0; $i < $count; $i++) {
        for ($j = $i + 1; $j < $count; $j++){
            if ($arr[$i]>$arr[$j]){
                swap($arr,$i,$j);
            }
        }
    }
    return $arr;
}

希尔排序

思想

代码实现

堆排序

思想
例题

代码实现

归并排序

思想
例题

代码实现

function mergerSort($arr)
{
    $temp = new SplFixedArray(count($arr)); //定义一个模板数组
    sortArr($arr, 0, count($arr) - 1, $temp);
    return $arr;
}

function sortArr(&$arr, $left, $right, $temp)
{
    if ($left < $right) {
        $mid = floor(($right + $left) / 2);
        sortArr($arr, $left, $mid, $temp);
        sortArr($arr, $mid + 1, $right, $temp);
        merger($arr, $left, $mid, $right, $temp);
    }

}

function merger(&$arr, $left, $mid, $right, $temp)
{
    $i = $left;
    $j = $mid+1;
    $t = 0;

    while ($i<=$mid&&$j<=$right){
        if($arr[$i]<=$arr[$j]){
            $temp[$t++]=$arr[$i++];
        }else{
            $temp[$t++]=$arr[$j++];
        }
    }
    while ($i<=$mid){
        $temp[$t++]=$arr[$i++];
    }
    while ($j<=$right){
        $temp[$t++]=$arr[$j++];
    }
    $t=0;
    while ($left<=$right){
            $arr[$left++] = $temp[$t++];
    }
    return $arr;

}

快速排序

代码实现

function quickSort(array &$arr, $left, $right)
{
    if ($left > $right) {
        return;
    }
    $temp = $arr[$left]
    $i = $left;
    $j = $right;
    while ($i != $j) {
        while ($i < $j && $arr[$j] >= $temp) { 
            $j--;
        }
        while ($i < $j && $arr[$i] <= $temp) {
            $i++;
        }
        if ($i < $j) {
            swap($arr, $i, $j);
        }
    }
    $arr[$left] = $arr[$i];//因为我们从右边开始,所以最后碰到的数字必然比我们的关键数据小。
    $arr[$i] = $temp;
    quickSort($arr, $left, $i - 1);//继续处理左边的,这里是一个递归的过程
    quickSort($arr, $i + 1, $right);//继续处理右边的 ,这里是一个递归的过
}

# 注解:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pareto排序算法是一种用于多目标优化问题的排序方法,它可以将解集中的解按照非支配关系进行排序。在Pareto排序算法中,首先需要确定一个基准解,然后将其他解与基准解进行比较,根据非支配关系将解分为不同的层次。具体的排序方法有很多种,包括庄家法、擂台赛法、递归方法以及快速排序方法等\[2\]。 快速排序方法是目前普遍使用的Pareto排序算法之一。它通过将解集划分为两个子集,然后对每个子集进行递归排序,最终将解集按照非支配关系进行排序。在快速排序方法中,首先选择一个解作为基准解,然后将其他解与基准解进行比较,将非支配的解放入一个新的集合中。接下来,对新集合进行递归排序,直到所有解都被排序为止\[2\]。 通过多轮排序,Pareto最优解集可以被找到。在排序的过程中,解集中的解按照非支配关系被分为不同的层次。最终,我们可以得到一个非支配层次关系的种群个体集合\[3\]。 总结来说,Pareto排序算法是一种用于多目标优化问题的排序方法,它可以将解集按照非支配关系进行排序。其中,快速排序方法是一种常用的Pareto排序算法,通过递归地将解集划分为子集并进行排序,最终得到Pareto最优解集\[2\]\[3\]。 #### 引用[.reference_title] - *1* *2* *3* [多目标进化算法(二)——非支配排序/NSGA-II](https://blog.csdn.net/qq_38537501/article/details/123360414)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值