1. 程式人生 > >插入排序及優化

插入排序及優化

2、C語言程式碼實現
#include <stdio.h>

void halfInsertSort(int a[],int n);

int main()
{
    int a[] = {0,1,2,3,4,6,7,8,9,10,5};
    int k = 0;
    halfInsertSort(a,10);
    for(k=1;k<=10;k++)
    {
        printf("%4d",a[k]);
    }
    return 0;
}

void halfInsertSort(int a[],int n)
{
    int low,mid,high;
    int i,j,m;
    for(i=2;i<=n;i++)
    {
        a[0] = a[i];
        low = 1;
        high = i -1;
        while(low<=high)
        {
            m = (low+high)/2;
            if(a[0]<a[m])
            {
                high = m -1;
            }else low = m + 1;
        }
        for(j=i-1;j>=high;j--)
        {
            a[j+1] = a[j];
        }
        a[high+1] = a[0];
    }
}

相關推薦

C語言-資料結構-插入排序優化-原始碼

1. 插入排序的定義及複雜度插入排序的基本思想是:每步將一個待排序的紀錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止。其時間複雜度為O(n^2)。2. 原始碼執行結果如下圖

插入排序優化

2、C語言程式碼實現#include <stdio.h> void halfInsertSort(int a[],int n); int main() { int a[] = {0,1,2,3,4,6,7,8,9,10,5}; int k = 0; halfInsert

經典演算法之三:插入排序二分優化

直接插入排序(Insertion Sort)的基本思想是:每次將一個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子序列中的適當位置,直到全部記錄插入完成為止。 設陣列為a[0…n-1]。

插入排序與歸併排序優化

看CLRS順便做下筆記總結一下,理清思路。(所有排序例子皆為從小到大,各位覺得哪裡能更好地改進都可以指出來) 插入排序(c語言實現) 最壞情況下的執行時間是Θ(n*n),跟氣泡排序,選擇排序的最壞情況下的執行時間是相同的 但是,運算的速度 插入>

七大排序演算法---直接插入排序折半優化

思路分析 將一個待排序元素,按其大小,插入到前面已經排好序的一組元素的合適位置上去,直到元素全部插完為止。 簡單來說:end指已經排好陣列的最後一個元素,end找到插入的位置(設定一個temp,

資料結構圖文解析之:直接插入排序及其優化(二分插入排序)解析C++實現

0. 資料結構圖文解析系列 1. 插入排序簡介 插入排序是一種簡單直觀的排序演算法,它也是基於比較的排序演算法。它的工作原理是通過不斷擴張有序序列的範圍,對於未排序的資料,在已排序中從後向前掃描,找到相應的位置並插入。插入排序在實現上通常採用就地排序,因而空間複雜度為O(1)。在從後向前掃描的過程中,需要反

歸並排序優化(Java實現)

繼續 soft local == else 歸並排序 right 數據 cal 普通歸並排序 public class MergeSort { /** * @param arr 待排序的數組 * @param left 本次歸並

圖解算法系列之插入排序優化版)

(1)演算法描述 對於給定的一個線性空間,遍歷考察每一個元素,將當前元素拷貝一份,並將前一個元素拷貝到當前元素的原位置。拷貝出來的元素與前一個元素進行比較,如果滿足前一個元素大於或小於當前元素就將當前拷貝出來的元素放到當前位置,否則繼續向前比較。 (2)圖解演算法 (3)C/C++程式碼實現

選擇排序插入排序插入排序二分優化模板

#include <bits/stdc++.h> using namespace std; int a[11] = {10,9,8,6,3,7,2,1,1,4,5}; void selectSort(int a[],int n){ //選擇排序 int min,index;

python(氣泡排序優化版)

#coding=utf-8 #氣泡排序 import random print("氣泡排序") print("隨機生成一個列表") list = [] for i in range(8):     num = random.choice(range(100)) &

演算法導論—插入排序Matlab實現

插入排序是《演算法導論》中的第一個演算法, 插入排序:Insertion-sort 輸入:待排序陣列A[1,···,n],長度為n 輸出:按從小到大順序排序好的陣列 演算法思想:插入排序是最簡單直觀的排序方法,原理就是通過構建有序序列,隨後將待排序元素插

插入排序演算法+優化 (二分查詢優化有序部分)C語言實現

直接插入排序 插入排序思想        直接插入排序思想是將待排序的陣列看作兩個部分:有序部分和無序部分,排序過程就是不斷將無序部分的元素插入到有序部分合適的位置上,使有序部分元素不斷增加而無序部分資料不斷減少,直到陣列全部有序為止。         假設陣列A[0...

Java演算法實現之氣泡排序優化

氣泡排序,是一種很簡單的排序演算法。原理就不過多介紹了,直接入手demo。 需求:輸入一組資料,用氣泡排序進行排序。 先用最直接的方法進行排序,程式碼如下: //對一組數進行氣泡排序 public class Bubble01 { public static void m

演算法學習(1):排序演算法-插入排序python實現

前言 插入排序應該是最容易想到的排序演算法,其核心思想是:將待排序的序列看成兩部分,以某一個元素為界,左邊的是排好序的序列,右邊是待排序的序列,每次讀取邊界上的一個元素,然後將它跟排序好的序列中的元素一個一個對比,然後排好序的元素依次挪出個空位,然後將這個元素

java排序中的插入排序優化-----二分排序

二分排序的思想:1)、給定下界:low,給定上界:high,中:mid2)、將插入的數和mid位置的陣列元素進行比較,如果比mid位置的大則low=mid+1,否則high=mid-13)、之後需要從插入數插入位置開始的陣列元素全部往後摞一位。騰出hight+1存放插入數。p

js氣泡排序優化

氣泡排序的基本思想是對所有相鄰記錄的關鍵字值每一輪進行比效,如果(a[j]>a[j+1]),則將其交換,最終達到有序化。 它是穩定的排序 最壞情況: **時間複雜度為O(n^2)**是把順序的排列變成逆序,或者把逆序的數列變成順序。在這種情況下,每一次比較

快速排序優化(三路劃分等)

快速排序, 是最經典的排序演算法之一。快速排序擁有良好的時間複雜度,平均為O(nlog2n),最差為O(n2)。在這裡,我們不妨略略深入討論一下快速排序: 時間複雜度分析 首先說平均時間複雜度。以比較常用的從兩頭進行掃描的演算法為例,演算法主要分兩步:

js實現氣泡排序優化

    就排序演算法來說氣泡排序算是比較好理解的了,設想一下這樣一個上體育課的排隊的場景。體育老師要求按身高的由低到高依次排列成一隊,假設這是這學期的第一次體育課。大家剛開始都是處於亂排的狀態,假設隊伍有n個人。這時體育

氣泡排序優化(python實現)

氣泡排序大家應該都很熟悉,是一個比較交換排序,時間複雜度是O(n2),之前用過java實現過,現在用python來實現一次,還有其優化 總共用了三種實現方式 話不多說,直接上程式碼,比較三種的效能------------------ #! -*- coding:utf-

冒泡排序優化

pro ima 循環 author sha 是否 ffffff string als 思路 代碼 package com.zgz; /** * 冒泡排序 * 優化思路: * 1. 引入標誌位,判斷數列是否有序,若有序則跳出不執行剩下的幾輪循環 *