10个排序算法,待更新

1.冒泡和快速排序

    /// <summary>
    /// bubble sort
    /// </summary>
    /// <param name="arr">the array to sort</param>
    /// <returns></returns>
    public int[] BubbleSort(int[] arr) {
      Console.WriteLine($"Origin: { String.Join(",", arr)}");
      int step = 0;
      for (int i = 0; i < arr.Length; i++) {
        for (int j = 0; j < arr.Length-i-1; j++) {
          var leftItem = arr[j];
          var rightItem = arr[j+1];
          if (leftItem > rightItem) {
            arr[j] = rightItem;
            arr[j + 1] = leftItem;
            string currentArrString = GetArrItemString(arr);
            Console.WriteLine($"Step{++step}  {leftItem} <=>{rightItem} : {currentArrString}");
          }
        }
      }
      return arr;
    }


    /// <summary>
    /// Get the array string
    /// </summary>
    /// <param name="arr">the array to be converted to string</param>
    /// <returns></returns>
    private string GetArrItemString(int[] arr) {
      StringBuilder resultStr = new StringBuilder();
      if (arr.Length == 0) {
        return String.Empty;
      }
      for (int i = 0; i < arr.Length; i++) {
        resultStr.Append(arr[i].ToString());
        resultStr.Append(",");
      }
      return resultStr.ToString();
    }

    /// <summary>
    /// Swap two positions' value 
    /// </summary>
    /// <param name="arr">The array</param>
    /// <param name="left">left array index</param>
    /// <param name="right">right array index</param>
    private void Swap(int[] arr, int left, int right) {
      var templateValue = arr[left];
      arr[left] = arr[right];
      arr[right] = templateValue;
      string currentArrString = GetArrItemString(arr);
      Console.WriteLine($"Step {arr[left]} <=>{arr[right]} : {currentArrString}  index: {left} <=> {right}   ");
    }

    /// <summary>
    /// Quick scan
    /// </summary>
    /// <param name="arr">The array to sort</param>
    public void QuickSort(int[] arr, int left, int right) {
      if (left > right) {
        return;
      }
      var temp = arr[left];
      int i = left, j = right;
      while (i < j) {
        while ( i < j && arr[j] >= temp) {
          j--;
        };
        while (i < j && arr[i] <= temp)
        {
          i++;
        }
        if ( i < j) {
          Swap(arr, i, j);
        }
      }
      //arr[left] = arr[i];
      //arr[i] = temp;
      Swap(arr, left, i);
      string currentArrString = GetArrItemString(arr);
      Console.WriteLine($"Current Array : {currentArrString}, i = {i}");
      QuickSort(arr, left, i-1);
      QuickSort(arr, i+1, right);
    }

2.待更新

原文地址:https://www.cnblogs.com/kingsmart/p/14765709.html