1 int[] nums = { 9, 5, 3, 1, 6, 4, 7, 2, 0, 8 }; 2 3 #region 冒泡排序 4 //for (int i = 0; i < nums.Length - 1; i++) 5 //{ 6 // for (int j = 0; j < nums.Length - 1 - i; j++) 7 // { 8 // if (nums[j] > nums[j + 1]) 9 // { 10 // int temp = nums[j]; 11 // nums[j] = nums[j + 1]; 12 // nums[j + 1] = temp; 13 // } 14 // } 15 //} 16 17 //for (int i = 0; i < nums.Length - 1; i++) 18 //{ 19 // for (int j = 0; j < nums.Length - 1 - i; j++) 20 // { 21 // if (nums[j] < nums[j + 1]) 22 // { 23 // var tmp = nums[j]; 24 // nums[j] = nums[j + 1]; 25 // nums[j + 1] = tmp; 26 // } 27 // } 28 //} 29 #endregion 30 #region 插入排序 31 //for (int i = 1; i < nums.Length; i++) 32 //{ 33 // int insertVal = nums[i]; //首先记住这个预备要插入的数 34 // int insertIndex = i - 1; //找出它前一个数的下标(等下 准备插入的数 要跟这个数做比较) 35 36 // //如果这个条件满足,说明,我们还没有找到适当的位置 37 // while (insertIndex >= 0 && insertVal < nums[insertIndex]) //这里小于是升序,大于是降序 38 // { 39 // nums[insertIndex + 1] = nums[insertIndex]; //同时把比插入数要大的数往后移 40 // insertIndex--; //指针继续往后移,等下插入的数也要跟这个指针指向的数做比较 41 // } 42 // //插入(这时候给insertVal找到适当位置) 43 // nums[insertIndex + 1] = insertVal; 44 //} 45 #endregion 46 #region 选择排序 47 //for (int i = 0; i < nums.Length - 1; i++) 48 //{ 49 // int min_index = i; //list中最小值的索引 50 // for (int j = i + 1; j < nums.Length; j++) 51 // { 52 // if (nums[j] < nums[min_index]) 53 // { 54 // min_index = j; 55 // } 56 // } 57 // int temp = nums[i]; 58 // nums[i] = nums[min_index]; 59 // nums[min_index] = temp; 60 //} 61 #endregion 62 #region 希尔排序 63 //希尔排序利用了插入排序的一个特点来优化排序算法,插入排序的这个特点就是:当数组基本有序的时候,插入排序的效率比较高。 64 int gap = nums.Length / 2; 65 66 while (1 <= gap) 67 { 68 // 把距离为 gap 的元素编为一个组,扫描所有组 69 for (int i = gap; i < nums.Length; i++) 70 { 71 int j = 0; 72 int temp = nums[i]; 73 74 // 对距离为 gap 的元素组进行排序 75 for (j = i - gap; j >= 0 && temp < nums[j]; j = j - gap) 76 { 77 nums[j + gap] = nums[j]; 78 } 79 nums[j + gap] = temp; 80 } 81 gap = gap / 2; // 减小增量 82 } 83 #endregion 84 85 //打印数组 86 for (int i = 0; i < nums.Length; i++) 87 { 88 Console.WriteLine(nums[i]); 89 }