程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c/c++常用算法(11) -- 基本排序算法(插入排序)

c/c++常用算法(11) -- 基本排序算法(插入排序)

編輯:C++入門知識

插入排序


采用的是以“玩橋牌者”的方法為基礎的。即在考察記錄Ri之前,設以前的所有記錄R1, R2,…., Ri-1已排好序,然後將Ri插入到已排好序的諸記錄的適當位置。

最基本的插入排序是直接插入排序(Straight Insertion Sort)。


1.直接插入排序


1.1 排序思想

將待排序的記錄Ri,插入到已排好序的記錄表R1, R2,…., Ri-1中,得到一個新的、記錄數增加1的有序表。直到所有的記錄都插入完為止。

設待排序的記錄順序存放在數組R[1…n]中,在排序的某一時刻,將記錄序列分成兩部分:

◆R[1…i-1]:已排好序的有序部分;

◆R[i…n]:未排好序的無序部分。

顯然,在剛開始排序時,R[1]是已經排好序的。


1.2 舉例


\


1.3 實現代碼:

#include 
#include 

#define SIZE 10

void InsertionSort(int *a,int len)
{
    int i,j,t,h;
    
    for (i=0; i=0 && t
運行結果:


\


2. 希爾排序


<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICAgICAgICDPo7b7xcXQ8ihTaGVsbCBTb3J0o6zT1rPGy/XQodT2wb+3qCnKx9K71ta31tfpsuXI68XF0PK3vbeooaM8L3A+CjxwPjIuMSDFxdDyy7zP6zwvcD4KPHA+PGJyPgo8L3A+CjxwPiAgICAgICAgotkgIM/IyKHSu7j21f3V+8r9ZDEoZDE8binX986qtdrSu7j21PbBv6OsvavIq7K/brj2vMfCvLfWs8lkMdfpo6yw0cv509DP4Lj0ZDG1xLzHwry3xdTa0rvX6dbQo6y8tLbU09rDv7j2ayhrPTEsMiwgIKGtZDEpo6xSW2tdLFJbZDEmIzQzO2tdLFJbMmQxJiM0MztrXSAsoa231tTazazSu9fp1tCjrNTauPfX6cTavfjQ0NaxvdOy5cjrxcXQ8qGj1eLR+dK7tM631tfpus3FxdDyuf2zzLPGzqrSu8zLz6O2+8XF0PKjuzwvcD4KPHA+ICAgICAgICCi2iAgyKHQwrXE1PbBv2QyPGQxo6zW2Li0otm1xLfW1+m6zcXF0PKy2df3o7vWsdbBy/nIobXE1PbBv2RpPTHOqta5o6y8tMv509C8x8K8t8W9+NK7uPbX6dbQxcXQ8s6q1rmhozwvcD4KPGJyPgoyLjIgvtnA/Qo8cD48YnI+CjwvcD4KPHA+PGltZyBzcmM9"http://www.Bkjia.com/uploadfile/Collfiles/20140105/20140105094550149.jpg" alt="\">


2.3 實現代碼:

#include 
#include 

#define SIZE 10

void ShellSort(int *a,int len)
{
    int i,j,h;
    int r,temp;
    int x = 0;
    
    for (r = len/2; r>=1; r/=2)
    {
        for (i = r; i=0 && temp < a[j])
            {
                a[j+r] = a[j];
                j-=r;
            }
            a[j+r] = temp;
        }
        x++;
        printf("第%d步行排序結果:",x);
        for (h = 0; h < len; h++)
        {
            printf(" %d",a[h]);
        }
        printf("\n");
    }
}


int main(int argc, const char * argv[])
{
    int shuzu[SIZE],i;
    
    srand(time(NULL));
    for (i=0; i
運行結果:




參考書籍:《C/C++常用算法手冊》 《數據結構-清華大學嚴蔚敏》

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved