好久不见
度过了清明假期,又开始盼望五一假期,祝各位程序员假期愉快,主要保养身体奥
冒泡排序
提起排序算法,就不得不提冒泡排序,可以说是入门排序算法了,很久没有写过冒泡排序,借此机会和大家一同温习温习
冒泡排序,顾名思义,就是像个气泡往出冒,冒泡排序,首先一个数组,int arr[2,5,1,9,4,7];相邻两两进行比较,
数值大如果前一个数比后一个数大,则进行交换位置,反之不变, 所以经过一个循环,数值最大的数放在数组的末尾,而下一轮循环,就循环末尾数值少一个次数,如上数组,第一次循环完成 int arr1[2,1,5,4,7,9];下一次循环9就不参与循环。就是冒泡排序。
public static void BubbleSort(int [] arr){
int temp;//临时变量
for(int i=0; i<arr.length-1; i++){ //表示趟数,一共arr.length-1次。
for(int j=arr.length-1; j>i; j--){
if(arr[j] < arr[j-1]){
temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
}
}
平均时间复杂度O(n2)
当然,并不是因为这个冒泡排序才写这篇博…
鸡尾酒排序
算法原理:数组中的数字本是无规律的排放,先找到最小的数字,把他放到第一位,然后找到最大的数字放到最后一位。然后再找到第二小的数字放到第二位,再找到第二大的数字放到倒数第二位。以此类推,直到完成排序。
相当于变形的冒泡排序
29 static List<int> CockTailSort(List<int> list)
30 {
31 //因为是双向比较,所以比较次数为原来数组的1/2次即可。
32 for (int i = 1; i <= list.Count / 2; i++)
33 {
34 //从前到后的排序 (升序)
35 for (int m = i - 1; m <= list.Count - i; m++)
36 {
37 //如果前面大于后面,则进行交换
38 if (m + 1 < list.Count && list[m] > list[m + 1])
39 {
40 var temp = list[m];
41
42 list[m] = list[m + 1];
43
44 list[m + 1] = temp;
45 }
46 }
47
48 Console.WriteLine("正向排序 => {0}", string.Join(",", list));
49
50 //从后到前的排序(降序)
51 for (int n = list.Count - i - 1; n >= i; n--)
52 {
53 //如果前面大于后面,则进行交换
54 if (n > 0 && list[n - 1] > list[n])
55 {
56 var temp = list[n];
57
58 list[n] = list[n - 1];
59
60 list[n - 1] = temp;
61 }
62 }
63
64 Console.WriteLine("反向排序 => {0}", string.Join(",", list));
65 }
66
67 return list;
68 }
69 }
70 }