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.待更新