美文网首页
常见排序

常见排序

作者: liamu | 来源:发表于2018-06-14 16:58 被阅读19次

时间复杂度是指执行算法所需要的计算工作量
而空间复杂度是指执行这个算法所需要的内存空间。

分类
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是指在排序期间全部对象太多,不能同时存放在内存中,必须根据排序过程的要求,不断在内,外存间移动的排序。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等

image

冒泡排序

  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  • 针对所有的元素重复以上的步骤,除了最后一个。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。


    冒泡排序
$nums = [3,44,2,9,12,56,89];

function bubblesort(array $arr = []){
    $counts = count($arr);
    if ($counts < 2) {
        return $arr;
    }
    for ($i=0; $i < $counts-1; $i++) { 
        for ($j=0; $j < $counts-$i-1; $j++) { 
            if ($arr[$j] > $arr[$j+1]) {
                $tmp = $arr[$j];
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $tmp;
            }
        }
    }
    return $arr;
}

选择排序

  • 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
  • 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
  • 重复第二步,直到所有元素均排序完毕。


    选择排序
$nums = [3,44,2,9,12,56,89];

function selectSort(array $numbers = array())
{
    $count = count( $numbers );
    if( $count <= 1 ) return $numbers;
    for($i = 0; $i < $count-1; $i ++)
    {
        $min = $i;
        for( $j = $i+1; $j < $count; $j ++)
        {
            if( $numbers[$min] > $numbers[$j] )
            {
                $min = $j;
            }
        }
        if( $min != $i )
        {
            $temp = $numbers[$min];
            $numbers[$min] = $numbers[$i];
            $numbers[$i] = $temp;
        }
    }
    return $numbers;
}

插入排序

  • 从第一个元素开始,该元素可以认为已经被排序
  • 取出下一个元素,在已经排序的元素序列中从后向前扫描
  • 如果该元素(已排序大于新元素),将该元素移动到下一位置
  • 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  • 将新元素插入到该位置后
  • 重复步骤2~5


    插入排序
function insertionSort(array $numbers = array())
{
    $count = count( $numbers );
    if( $count <= 1 ) return $numbers;
    for($i = 1; $i < $count; $i ++)
    {
        $temp = $numbers[$i];
        for($j = $i-1; $j >= 0 && $numbers[$j] > $temp; $j --)
        {
            $numbers[$j+1] = $numbers[$j];
        }
        $numbers[$j+1] = $temp;
    }
    return $numbers;
}

快速排序

  • 从数列中挑出一个元素,称为"基准"。
  • 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区操作。
  • 递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会结束,因为在每次的迭代中,它至少会把一个元素摆到它最后的位置去。


快速排序
function quickSort(array $arr = []){
    $counts = count($arr);
    if ($counts < 2) {
        return $arr;
    }
    $mid_value = $arr[0];
    $left_arr = $right_arr = [];
    for ($i=1; $i < $counts; $i++) { 
        if ( $mid_value > $arr[$i] ) {
            $left_arr[] = $arr[$i];
        } else {
            $right_arr[] = $arr[$i];
        }
    }
    return array_merge(quickSort($left_arr),(array)$mid_value,quickSort($right_arr));
}

相关文章

  • LeetCode大全

    1.常见排序算法: 常见的排序算法:冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、堆排序、计数排序、...

  • Python知识点:常见算法的python实现

    提到排序算法,常见的有如下几种:冒泡排序、选择排序、插入排序、快速排序、堆排序、归并排序、希尔排序;查找算法最常见...

  • 实现几种常见排序方法

    Java实现几种常见排序方法 日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还...

  • 常见排序的java实现

    常见排序的java实现 常见排序java实现 插入排序(二分插入排序) 希尔排序 快速排序(三数中值快排) 冒泡排...

  • IOS常见算法

    常见算法: 快速排序: 选择排序: 冒泡排序: 测试代码:

  • 排序算法

    常见的排序算法 常见的排序算法有:插入、希尔、选择、冒泡、归并、快速、堆排序。。。 插入排序 算法步骤一、从数组的...

  • 常见的10种排序算法与C#实现

    常见的排序算法——常见的10种排序[https://www.cnblogs.com/flyingdreams/p/...

  • 排序

    排序是实际运用中比较常见的情况。计算机界也对排序进行了很深入的研究。常见的排序算法有:快速排序、归并排序、插入排序...

  • 排序算法

    排序算法 冒泡排序 选择排序 插入排序 快速排序(最常见) 希尔排序 归并排序 源码:Sorting 冒泡排序 冒...

  • 记录几个常见的排序算法

    常见的排序有:快速排序、冒泡排序、希尔排序、选择排序、插入排序、归并排序 冒泡排序: 插入排序: 选择排序: 希尔...

网友评论

      本文标题:常见排序

      本文链接:https://www.haomeiwen.com/subject/vjdyeftx.html