C#之希爾排序
阿新 • • 發佈:2018-12-23
//檔案中的資料格式為 // 1 2 3 4 5 // 1 2 3 5 6 using System; using System.Text; using System.Collections; using System.IO; namespace InsertSort { class Program { static void Main() { string [email protected]"F://test.txt"; StreamReader sr = new StreamReader(path, Encoding.Default); string temp; ArrayList aL = new ArrayList(); while ((temp = sr.ReadLine()) != null) { string[] s = temp.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);//根據空格區分資料 int tempInt; foreach (string i in s) { tempInt = Convert.ToInt32(i); //string轉換成int,基本資料型別的轉換 aL.Add(tempInt); //將讀取到的資料存入aL中 } } int[] data = new int[aL.Count]; //將aL中的資料存入data方便使用排序演算法排序 for (int i = 0; i < aL.Count; i++) { data[i] = (int)aL[i]; } //希爾排序演算法 int d = data.Length / 2;//獲取d while (d > 0) { for (int i = d; i < data.Length; i++) //將陣列分成data.Length/d組 { int j = i-d; //代表此組中第一個元素的下標 int k = 1; while (j + k * d < data.Length) //對其中一組進行直接插入排序 { int tem=data[j+k*d]; //看做是無序集中的第一個元素 for (int n = 0; n < k; n++) //與有序集中的元素比較 { if (tem < data[j + n * d]) { data[j + k * d] = data[j + n * d]; data[j + n * d] = tem; break; } } k++; } } d /= 2; } for (int i=0;i<data.Length; i++) { Console.WriteLine(data[i]); } } } }