Part of the content transferred from-http://blog.csdn.net/morewindows/article/details/6668714
The Hill (Shell) sort is also known as narrowing the incremental sort , which is an insertion sort . It is a powerful version of the direct insertion sorting algorithm .
The method is due to DL. The shell was named after it was introduced in 1959.
The basic idea of the hill sort is:
The records are grouped by step Gap , and the direct insertion sorting method is used to sort each group of records.
As the stride size decreases , the grouped groups contain more and more records, and when the step value decreases to 1 , the entire data becomes a group that forms an ordered set of records, and the sort is completed.
An array of n=10 49, 38, 65, 97, 26, 13, 27, 49, 55, 4 for example
First time gap = 10/2 = 5
49 38 65 97 26 13 27 49 55 4
1 a 1B
2 a 2B
3 A 3B
4 a 4 b
5 a 5B
1A,1B,2A,2B are grouped, the numbers are the same in the same group, the uppercase letters represent the first elements of the group, and each time the data for the same group is inserted directly into the sort. It is divided into five groups (49, 13) (38, 27) (65, 49) (97, 55) (26, 4) so that each group is sorted (13, 49) (27, 38) (49, 65) (55, 97) (4, 26), the same as below.
Second time gap = 5/2 = 2
After sorting
13 27 49 55 4 49 38 65 97 26
1 a 1 b 1C 1D 1E
2 a 2B 2C 2D 2E
The third time gap = 2/2 = 1
4 26 13 27 38 49 49 55 97 65
1 a 1 b 1C 1D 1E 1F 1G 1H 1I 1J
Fourth time gap = 1/2 = 0 Sort Done to get the array:
4 13 26 27 38 49 49 55 65 97
Realize:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespace_009_ Hill Sort {classProgram {Static voidMain (string[] args) { int[] data =New int[] { the, -, the, +, -, -,8, -, *, $, - }; Shellsort (data); for(inti =0; I < data. Length; i++) {Console.Write (Data[i]+" "); } } Public Static voidShellsort (int[] dataarray) { intGap = dataarray.length/2; while(gap>=1) { //group the elements from gap to scan all groups for(inti = gap; i < dataarray.length; i++) { intIvalue =Dataarray[i]; intj = i-Gap; //sorting element groups that are distance gap while(j>=0&& dataarray[j]>ivalue) {Dataarray[j+ Gap] =Dataarray[j]; J-=Gap; } dataarray[j+ Gap] =Ivalue; } Gap= Gap/2;//Decrease Increment } } }}
Sort algorithm-Hill sort