美文网首页
算法——排序算法

算法——排序算法

作者: 雷小雷LL | 来源:发表于2020-02-14 16:30 被阅读0次

冒泡排序

  • 时间复杂度:O(n2)
  • 空间复杂度:O(1)
  • 稳定排序
        public static void BubbleSort(int[] a)
        {
            for (int i = 0; i < a.Length; i++)
            {
                bool isFlag = false;
                for (int j = 0; j < a.Length - i - 1; j++)
                {
                    if (a[j] > a[j + 1])
                    {
                        isFlag = true;
                        //i与i+1比较
                        int temp = a[j + 1];
                        a[j + 1] = a[j];
                        a[j] = temp;
                    }
                }
                if (!isFlag) break;
            }
        }
这里定义了一个isFlag,是对冒泡排序的优化

选择排序

  • 时间复杂度:O(n2)
  • 空间复杂度:O(1)
  • 非稳定排序
        public static void SelectSortFun(int[] a)
        {
            for (int i = 0; i < a.Length - 1; i++)
            {
                int min = i;
                for (int j = i + 1; j < a.Length; j++)
                {
                    if (a[min] > a[j])
                    {
                        //最小元素交换第i个元素
                        min = j;
                    }
                }
                int temp = a[min];
                a[min] = a[i];
                a[i] = temp;
            }
        }

插入排序

  • 时间复杂度:O(n2)
  • 空间复杂度:O(1)
  • 稳定排序
        public static void InsertSort(int[] a)
        {
            for (int i = 1; i < a.Length; i++)
            {
                int inserted = a[i];
                int j = i - 1;
                for (; j >= 0 && a[j] > inserted; j--)
                {
                    arr[j + 1] = arr[j];
                }
                arr[j + 1] = inserted;
            }
        }

希尔排序

  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(1)
  • 非稳定排序
        public static void SheelSort(int[] a)
        {
            for (int gap = a.Length / 2; gap > 0; gap /= 2)
            {
                for (int i = gap; i < a.Length; i++)
                {
                    int inserted = a[i];
                    int j;
                    for (j = i - gap; j >= 0 && a[j] > inserted; j -= gap)
                    {
                        a[j + gap] = a[j];
                    }
                    a[j + gap] = inserted;
                }
            }
        }

归并排序

  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(n)
  • 稳定排序
        public static void MergeSort(int[] a, int left, int right)
        {
            if (left < right)
            {
                int mid = (left + right) / 2;
                MergeSort(a, left, mid);
                MergeSort(a, mid + 1, right);
                Merge(a, left, mid, right);
            }
        }
        public static void MergeSort2(int[] a)
        {
            for (int i = 1; i < a.Length; i += i) 
            {
                int left = 0;
                int mid = left + i - 1;
                int right = mid + 1;
                while (right < a.Length) 
                {
                    Merge(a, left, mid, right);
                    left = right + 1;
                    mid = left + i - 1;
                    right = mid + i;
                }
                if (left < a.Length && mid < a.Length) 
                {
                    Merge(a, left, mid, a.Length - 1);
                }
            }
        }
        public static void Merge(int[] a, int left, int mid, int right)
        {
            int i = left, j = mid + 1;
            int[] temp = new int[right + j];
            for (int k = left; k <= right; k++)
            {
                if (i > mid)
                {
                    temp[k] = a[j++];
                }
                else if (j > right)
                {
                    temp[k] = a[i++];
                }
                else if (a[i] < a[j])
                {
                    temp[k] = a[i++];
                }
                else
                {
                    temp[k] = a[j++];
                }
            }
            for (int m = left; m <= right; m++)
            {
                a[m] = temp[m];
            }
        }

相关文章

网友评论

      本文标题:算法——排序算法

      本文链接:https://www.haomeiwen.com/subject/ubqjfhtx.html