程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C# 希爾排序 實現代碼

C# 希爾排序 實現代碼

編輯:關於C#
 

 

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Sort{    class ShellSorter    {        public static int[] Sort(int[] a)        {            ShellSort(a);            return  a;        }        public static void ShellSort(int[] myArray)        {            int i, j, increment;            int temp;            for (increment = myArray.Length / 2; increment > 0; increment /= 2)            {                for (i = increment; i < myArray.Length; i++)                {                    temp = myArray[i];                    for (j = i; j >= increment; j -= increment)                    {                        if (temp < myArray[j - increment])                            myArray[j] = myArray[j - increment];                        else                            break;                    }                    myArray[j] = temp;                }            }        }    }}

 

希爾排序是對直接插入排序算法的改進,其主要思想是:先將整個排序數列分割成為若干個子序列,在子序列分別進行直接插入排序,待整個數列基本有序時再對全部進行一次直接插入排序。以此來形成新的有序數列。一般分割方法是兩個元素相距d=n/2,n/4,n/8……以此類推。 1.基本思想: 把整個待排序的數據元素分成若干個小組,對同一小組內的數據元素用直接插入法排序;小組的個數逐次縮小,當完成了所有數據元素都在一個組內的排序後排序過程結束。 2.技巧: 小組的構成不是簡單地“逐段分割”,而是將相隔某個增量dk的記錄組成一個小組,讓增量dk逐趟縮短(例如依次取5,3,1),直到dk=1為止。 3.優點: 讓關鍵字值小的元素能很快前移,且序列若基本有序時,再用直接插入排序處理,時間效率會高很多。 例子來源 C   希爾排序 - Complaint Free Wolrd - Complaint Free Wolrd C   希爾排序 - Complaint Free Wolrd - Complaint Free Wolrd 例子來源 C   希爾排序 - Complaint Free Wolrd - Complaint Free Wolrd        流程圖來源 C   希爾排序 - Complaint Free Wolrd - Complaint Free Wolrd

對於插入排序算法來說,如果原來的數據就是有序的,那麼數據就不需要移動,而插入排序算法的效率主要消耗在數據的移動中。因此可知:如果數據的本身就是有序的或者本身基本有序,那麼效率就會得到提高

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