算法基础之排序
一、冒泡排序
思路:两两元素相比,前一个比后一个大就交换,直到将最大的元素交换到末尾位置,循环次数取决于数组长度。
时间复杂度:O(N^2) , 空间复杂度:O(1)
举例:
// 冒泡排序 public static void Maopao(int[] test) { for (int i = test.Length-1; i > 0; i--) { // 遍历一次,最大值放到最后 for (int j = 0; j < i; j++) { // 小的在前,大的在后 if (test[j] > test[j + 1]) { int ch = test[j]; test[j ] = test[j+1]; test[j+1] = ch; } } } }
二、快速排序
思路:
1、选定一个基准值,最好选定最左边或者最右边,选中间会给自己找麻烦。
2、确定两个指针left 和right 分别从左边和右边向中间遍历数组。
3、如果选最右边为基准值,那么left指针先走,如果遇到大于基准值的数就停下来。
4、然后右边的指针再走,遇到小于基准值的数就停下来。
5、交换left和right指针对应位置的值。
6、重复以上步骤,直到left = right ,最后将基准值与left(right)位置的值交换。
举例:
三、希尔排序
思路:
举例:
四、插入排序
思路:第一次循环,array[2]跟array[1]比较,大的放后,小的放前,第N次循环,array[N]跟array[N-1]比较,大则两者互换,继续向前比较,直至大于左边的数值,小则直接进入下一轮循环
举例:
public static void Insert(int[] test) { for (int i = 0; i < test.Length; i++) { for (int j = i; j >0; j--) { if (test[j] < test[j-1]) { int x = test[j]; test[j] = test[j-1]; test[j-1] = x; } else break; } } }
五、归并排序
思路:
举例:
六、计数排序
思路:
举例:
七、基数排序
思路:
举例:
八、选择排序
思路:
举例:

浙公网安备 33010602011771号