經典演算法(2) 直接插入排序的三種實現

來源:互聯網
上載者:User

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

設數組為a[0…n-1]。

1. 初始時,a[0]自成1個有序區,無序區為a[1..n-1]。令i=1

2. 將a[i]併入當前的有序區a[0…i-1]中形成a[0…i]的有序區間。

3. i++並重複第二步直到i==n-1。排序完成。

下面給出嚴格按照定義書寫的代碼(由小到大排序):

void Insertsort1(int a[], int n)  {      int i, j, k;      for (i = 1; i < n; i++)      {          //為a[i]在前面的a[0...i-1]有序區間中找一個合適的位置          for (j = i - 1; j >= 0; j--)              if (a[j] < a[i])                  break;                //如找到了一個合適的位置        // www.bianceng.cn          if (j != i - 1)          {              //將比a[i]大的資料向後移              int temp = a[i];              for (k = i - 1; k > j; k--)                  a[k + 1] = a[k];              //將a[i]放到正確位置上              a[k + 1] = temp;          }      }  }

這樣的代碼太長了,不夠清晰。現在進行一下改寫,將搜尋和資料後移這二個步驟合并。即每次a[i]先和前面一個資料a[i-1]比較,如果a[i] > a[i-1]說明a[0…i]也是有序的,無須調整。否則就令j=i-1,temp=a[i]。然後一邊將資料a[j]向後移動一邊向前搜尋,當有資料a[j]<a[i]時停止並將temp放到a[j + 1]處。

void Insertsort2(int a[], int n)  {      int i, j;      for (i = 1; i < n; i++)          if (a[i] < a[i - 1])          {              int temp = a[i];              for (j = i - 1; j >= 0 && a[j] > temp; j--)                  a[j + 1] = a[j];              a[j + 1] = temp;          }  }

再對將a[j]插入到前面a[0…j-1]的有序區間所用的方法進行改寫,用資料交換代替資料後移。如果a[j]前一個資料a[j-1] > a[j],就交換a[j]和a[j-1],再j--直到a[j-1] <= a[j]。這樣也可以實現將一個新資料新併入到有序區間。

void Insertsort3(int a[], int n)  {      int i, j;      for (i = 1; i < n; i++)          for (j = i - 1; j >= 0 && a[j] > a[j + 1]; j--)              Swap(a[j], a[j + 1]);  }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.