內容:
1、冒泡排序
2、选择排序
3、插入排序
4、希尔排序
一、冒泡排序
冒泡排序思想:每遍历数组一次将数组中剩下的最大的排到本次遍历数组的最后。
1.每次遍历均是从数组的第一个元素开始的
2.两层for循环,第一层用来控制遍历的次数,为陈列的长度-1;第二层用来找到本次循环中元素的最大值,并将其排到本次数组的最后。
示例代码:
1 public int[] maopaoSort(int[] arr) 2 { 3 if (arr.Length == 0) 4 { 5 Console.WriteLine("空數組"); 6 } 7 else 8 { 9 for (int i = 0; i < arr.Length - 1; i++) 10 { 11 for (int j = 0; j < arr.Length - 1 - i; j++) 12 { 13 if (arr[j] > arr[j + 1]) 14 { 15 int temp = arr[j]; 16 arr[j] = arr[j + 1]; 17 arr[j + 1] = temp; 18 } 19 } 20 } 21 } 22 return arr; 23 }
二、选择排序
选择排序思想:每次遍历数组将剩余数组中的最小值排到本次遍历陈列的最前面
1.两层for循环,第一层用于控制循环的次数,第二层循环用于找到本次循环中的最小值,并将其排到本次循环体的最前面
示例代码:
1 public int[] xuanzeSort(int[] arr) 2 { 3 if (arr.Length == 0) 4 { 5 Console.WriteLine("空數組"); 6 } 7 else 8 { 9 for (int i = 0; i < arr.Length; i++) 10 { 11 for (int j = i + 1; j < arr.Length; j++) 12 { 13 int temp; 14 //不斷的將最小的送到arr[i]的面前,直到迴圈結束 15 if (arr[i] > arr[j]) 16 { 17 temp = arr[i]; 18 arr[i] = arr[j]; 19 arr[j] = temp; 20 } 21 } 22 } 23 } 24 return arr; 25 }
三、插入排序
插入排序思想:假设陈列中前n-1个都排好序了,现在将数组中的第几个放到前面已排好序的数组中使得这n个数任然是一个排好序的数组。
1.有一个for循环,先将数组中的前两个数排序,然后再将前三个数排序,
2.每次都是从后向前排序,直到找到合适的位置
示例代码:
1 public int[] charuSort(int[] arr) { 2 if (arr.Length == 0) 3 { 4 Console.WriteLine("空數組"); 5 } 6 else { 7 for (int i = 0; i < arr.Length; i++) 8 { 9 int temp; 10 int j = i; 11 while (j>0 && arr[j-1]>arr[j]) 12 { 13 temp=arr[j]; 14 arr[j] = arr[j - 1]; 15 arr[j - 1] = temp; 16 --j; 17 } 18 } 19 } 20 return arr; 21 }
四、希尔排序
希尔排序思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。
1.先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直到所取的增量dt=1
示例代码:
1 public int[] shellSort(int[] arr) { 2 int k = arr.Length / 2; //設置步長 3 while (k>0) 4 { 5 for (int i = k; i < arr.Length; i++) 6 { 7 int t = arr[i]; 8 int j = i - k; 9 while (j>=0 && t<arr[j]) 10 { 11 arr[j + k] = arr[j]; 12 j = j - k; 13 } 14 arr[j + k] = t; 15 } 16 k /= 2; 17 } 18 return arr; 19 }
参考资料:http://www.cnblogs.com/WangJinYang/p/3553792.html