排序算法之希爾排序算法---c++實現

看了一下希爾排序算法的思想,終於可以自己用代碼把它寫出來。代碼雖然冗長,但總的來說,基本能把希爾排序的思體現出來。

總的思想是:把一個數據集合依次進行減半分組,然後分別對每組進行直接插入排序。

#include<iostream>
using namespace std;
void ShellSort(int arry[], int n)
{
 int i, j, gap;
 int k, temp, l;
 for (gap = n / 2; gap > 0; gap /= 2)  //取步長
 {
  for (i = 0; i < gap; i++)  //進行gap次直接插入排序
  {
   for (j = i + gap; j < n; j += gap)
   {
    k = j - gap;
    temp = arry[j];
    //從小到大進行排序
    while (k >= 0 && arry[j] < arry[k])
     k -= gap;
    //到這一步,說明找到插入的位置(k + gap)了
    //移動插入
    for (l = j - gap; l > k; l -= gap)
     arry[l + gap] = arry[l];
    arry[k+gap] = temp;
   }
  }
 }
}
int main()
{
 cout << "排序前的數據爲:";
 int a[10], i;
 for (i = 0; i < 10; i++)
 {
  a[i] = rand() % 10 + 1;
  cout << a[i] << " ";
 }
 cout << endl;
 cout << "排序後的數據爲:";
 ShellSort(a, 10);
 for (i = 0; i < 10; i++)  
  cout << a[i] << " ";
 cout << endl;
 return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章