排序算法总结

冒泡排序 稳定排序算法 时间复杂度o(n2) 空间复杂度o(1)

点击查看代码
        static void BubbleSort()
        {
            int[] data = { 1, 8, 5, 7, 9, 4, 6, 99, 88, 74 };
            int i, j, flag;//岗哨模式的冒泡排序
            for (i = data.Length - 1; i > 0; i--)
            {
                flag = 0;
                for (j = 0; j < i; j++)
                {
                    if (data[j] > data[j + 1])
                    {
                        data[j] = data[j] ^ data[j + 1];
                        data[j + 1] = data[j] ^ data[j + 1];
                        data[j] = data[j] ^ data[j + 1];
                        flag++;
                    }
                }
                if (flag == 0)
                {
                    break;
                }
            }
            foreach (int da in data)
            {
                Console.Write(da + " ");
            }
        }

选择排序 不稳定排序算法 时间复杂度o(n2) 空间复杂度o(1)

点击查看代码
        static void SelectionSort()
        {
            int[] data = { 1, 8, 5, 7, 9, 4, 6, 99, 88, 74 };
            int i, j, flag;//岗哨模式的冒泡排序 
            for (i = 0; i < data.Length - 1; i++)
            {
                for (j = i + 1; j < data.Length; j++)
                {
                    if (data[i] > data[j])
                    {
                        data[i] = data[i] ^ data[j];
                        data[j] = data[i] ^ data[j];
                        data[i] = data[i] ^ data[j];
                    }
                }
            }
            foreach (int da in data)
            {
                Console.Write(da + " ");
            }
        }

插入排序 稳定排序 时间复杂度o(n2) 空间复杂度o(1)

点击查看代码
        static void InsertionSort()
        {
            int[] data = { 1, 8, 5, 7, 9, 4, 6, 99, 88, 74 };

            int i, j, temp;
            for (i = 1; i < data.Length; i++)
            {
                temp = data[i];
                j = i - 1;
                while (j >= 0 && data[j] > temp)
                {
                    data[j + 1] = data[j];
                    j--;
                }
                data[j + 1] = temp;
            }

            foreach (int da in data)
            {
                Console.Write(da + " ");
            }
        }

希尔排序 稳定排序算法 改进版的插入排序 时间复杂度o(n3/2) 空间复杂度o(1)

写法一
        static void ShellSort()
        {
            int[] data = { 1, 8, 5, 7, 9, 4, 6, 99, 88, 74 };

            int i, j, temp;
            int jmp = data.Length / 2;//递增量

            while (jmp != 0)
            {
                for (i = jmp; i < data.Length; i++)
                {
                    temp = data[i];
                    j = i - jmp;
                    while (j >= 0 && data[j] > temp)
                    {
                        data[j + jmp] = data[j];
                        j = j - jmp;
                    }
                    data[j + jmp] = temp;
                }
                jmp = jmp / 2;
            }

            foreach (int da in data)
            {
                Console.Write(da + " ");
            }
        }
写法二
        static void ShellSort2()
        {
            int[] data = { 1, 8, 5, 7, 9, 4, 6, 99, 88, 74 };

            for (int gap = data.Length / 2; gap > 0; gap /= 2)
            {
                for (int i = gap; i < data.Length; i++)
                {
                    int temp = data[i];
                    int j = i - gap;
                    while (j >= 0 && data[j] > temp)
                    {
                        data[j + gap] = data[j];
                        j = j - gap;
                    }
                    data[j + gap] = temp;
                }
            }
            foreach (int da in data)
            {
                Console.Write(da + " ");
            }
        }

合并排序(归并排序) 稳定排序算法 时间复杂度O(nlogn) 空间复杂度O(n)

快速排序 不稳定排序算法 时间复杂度O(log2n) 空间复杂度O(n)

posted @ 2024-02-17 23:26  caoruipeng  阅读(2)  评论(0编辑  收藏  举报