1. 程式人生 > >3種插入排序演算法(php)

3種插入排序演算法(php)

1.直接插入排序(插入排序)

function InsertSort($arr, $n)
{
    for ($i = 1; $i < $n; $i ++) {
        $t = $arr[$i];
        for ($j = $i - 1; $j >= 0 && $t < $arr[$j]; $j --)
            $arr[$j + 1] = $arr[$j];
        $arr[$j + 1] = $t;
    }
    return $arr;
}
2.折半插入排序 (插入排序)
function Binsort($arr ,$n){
for ($i = 1; $i < $n; $i++)
{
    $t = $arr[$i];
    
    $low=0;
    //有序數列的終點
    $high=$i-1;
    //待插入元素
    $t=$arr[$i];
    while  ($high >= $low)
    {
        $mid = floor (($low + $high) / 2);
        
        if ($t < $arr[$mid])
        {
            $high = $mid - 1;
        }
        else
        {
            $low = $mid + 1;
        }
    }
   for ($j = $i - 1; $j >= $low; $j--)
        $arr[$j + 1] = $arr[$j];


    $arr[$low] = $t;
    return $arr;
} 
}
3.希爾排序(插入排序)
function shell_sort($array){
    $count=count($array);
    if($count<=1){
     return  $array;
    }
    for($h=floor($count/2);$h>0;$h=floor($h/2)){
        for($i=$h;$i<$count;$i++){
            $temp=$array[$i];
            for($j=$i-$h;$j>=0 && $temp<$array[$j];$j-=$h){
                $array[$j+$h]=$array[$j];
            }
            $array[$j+$h]=$temp;
        }
    }
    return $array;
}

相關推薦

3插入排序演算法php

1.直接插入排序(插入排序) function InsertSort($arr, $n) {     for ($i = 1; $i < $n; $i ++) {         $t = $

歸併排序演算法php

概述: 歸併排序的演算法思想:講兩個或兩個以上的元素有序序列合併為一個有序序列。其中,二路歸併排序是最常見的歸併排序。 /** * 歸併排序演算法 */ function mergeSort(&a

(排序演算法)linux c語言實現二分插入排序演算法簡化版本的插入排序演算法

 二分插入演算法是在已經排序好的序列裡插入一個元素,是穩定的演算法,關鍵詞是折中。 比如說我要在12345678910裡插入一個3,那麼我先看看中間的數比3大,還是比3小,要是比3大,我就去後一半,如果是比3小,我就去前一半,現在進入某個一半後,再做如此操作,最後將其他的元素依次往後挪

6分鐘演示,15排序演算法視訊

    github:https://github.com/bingmann/sound-of-sorting 排序之聲 - “Audibilization”和排序演算法的視覺化:http://panthema.net/2013/sound-of-sorting/ 視訊:https

經典排序演算法4——折半插入排序演算法詳解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

java排序演算法------插入排序

插入排序 直接插入排序基本思想: 每一步將一個待排序的記錄,插入到前面已經排好序的有序序列中去,直到插完所有元素為止。 public static void sort(int[] arr) { int i; int t; for (int j

常見14經典排序演算法Java程式碼實現

尊重原創,轉載請標明出處   http://blog.csdn.net/abcdef314159 ,想了解更多演算法題可以關注微信公眾號“資料結構和演算法”,每天一題為你精彩解答。 一,氣泡排序 排序演算法其實有很多,氣泡排序基本上算是最簡單的一種

(排序演算法)linux c語言實現簡化版本的插入排序演算法二分插入

 二分插入演算法是在已經排序好的序列裡插入一個元素,是穩定的演算法,關鍵詞是折中。 比如說我要在12345678910裡插入一個3,那麼我先看看中間的數比3大,還是比3小,要是比3大,我就去後一半,如果是比3小,我就去前一半,現在進入某個一半後,再做如此操作,最後將其他的元

插入排序演算法java實現詳解版

插入排序分為兩種,直接插入排序和二分插入排序,本節我們只介紹直接插入排序。這兩種插入排序實際上都是插入排序,唯一的不同就是插入的方式不一樣。 插入排序就是往數列裡面插入資料元素。一般我們認為插入排序就是往一個已經排好序的待排序的數列中插入一個數,使得插入這個數之後,數列仍然有序。 二分插入排序也是用了分

java 實現 常見排序演算法 插入排序

大家好,我是烤鴨:        今天分享一下基礎排序演算法之直接插入排序。   1.     直接插入排序: 原理:假設前面的數為有序數列,然後有序數列與無序數列的每個數比較,我們可

排序演算法氣泡排序,簡單選擇排序,直接插入排序,希爾排序

氣泡排序,簡單選擇排序,直接插入排序是三種複雜度為O(n2)的演算法,希爾排序在特殊增量序列的時候可以獲得複雜度為O(n3/2) 氣泡排序 1、最簡單的排序實現 這裡把每個數和這個數之後的每個數比較,大於就交換位置。 缺點:多出了很多次沒有用的交

資料結構之排序演算法-直接插入排序,希爾排序,直接選擇排序

直接插入排序:時間複雜度:O(n^2) 基本演算法思路是:把後面待排序的記錄按其關鍵字的大小逐個插入到一個已經排好序的有序序列中,直到所有記錄插完為止,得到一個新的有序序列。(無序插入前面有序) 演算

常用排序演算法冒泡、選擇、快速的Java實現

       學習Java有一陣子了,現在還處於比較初級的水平,能夠把簡單的程式寫對就不錯了,更不用談現在能夠拿Java做什麼了。        學完了兩段網路視訊課程,接下來找本書簡單看看。只要有了一個初步的認識,接下來的東西應該可以更加順利一些。學習程式設計最好的方法就

排序演算法——插入排序

插入排序(英語:Insertion Sort)是一種簡單直觀的排序演算法。通過對未排序的資料執行逐個插入至合適的位置而完成排序工作。 插入排序演算法的運作如下: 1.首先對陣列的前兩個資料進行從小到大的排序; 2.接著將第3個數據與排好序的兩個資料進行比較,將第三個資料插入合適的位置;

排序演算法1:氣泡排序插入排序

1.1 氣泡排序 氣泡排序需要多次遍歷列表。它比較相鄰的項並交換那些無序的項。每次遍歷列表將下一個最大的值放在其正確的位置。實質上,每個項“冒泡”到它所屬的位置。 用python寫交換操作時,與大多數程式語言略有不同(需要臨時儲存位置),python可以執行

排序演算法1插入排序演算法分析

導語 今天,我們介紹的是排序演算法經典的一種排序演算法,這個演算法是插入排序。 相信大家都玩過紙牌。插入排序的工作方式就像許多人排序一手撲克牌。 開始時,我們的左手為空並且桌子上的牌面朝下(意味著我們不在翻開之前並不知道下一張牌是多大的)

常見查詢和排序演算法PHP實現

下面分享一些最常見的演算法,用PHP如何實現。 1、氣泡排序 function bubble_sort($arr) { $n=count($arr); for($i=0;$i<

常用的排序演算法--python實現

1. 選擇排序,時間複雜度O(n^2),演算法不穩定。     思路:(1)迴圈整個陣列 arr,選出最大的數,將它放在空陣列 new_arr 的第一個位置。                (2)將剛

八大內部排序演算法-冒泡、直接插入、簡單選擇、快速

八大內部排序演算法(上)冒泡、直接插入、簡單選擇、快速 排序分為內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需

排序演算法5- 折半插入排序Binary Insertion Sort

原理 插入排序演算法的優化演算法 排序演算法是和已排序佇列按順序一一比較,然後交換位置,直到找出插入位置。折半插入排序演算法是先適用折半查詢找出插入位置,然後統一後移。 注意點 時間複