算法基础之排序

一、冒泡排序

  思路:两两元素相比,前一个比后一个大就交换,直到将最大的元素交换到末尾位置,循环次数取决于数组长度。

  时间复杂度: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;
                }
            }
        }

 

五、归并排序

  思路:

  举例:

六、计数排序

  思路:

  举例:

七、基数排序

  思路:

  举例:

八、选择排序

  思路:

  举例:

posted @ 2022-12-07 15:29  Darius丶段  阅读(45)  评论(0)    收藏  举报