1. 程式人生 > Python爬蟲入門教學 >04 HTTP 協議通訊基原理

04 HTTP 協議通訊基原理

1.介紹

選擇排序演演算法屬於內部排序演演算法,是從欲排序的資料中,按指定的規則選出某一元素,再依規定交換位置達到排序的目的

時間複雜度:O(n^2) 雙層for

2.思想

選擇排序(select sorting)也是一種簡單的排序方法。它的基本思想是:第一次從arr[0]~arr[n-1]中選取最小值,

與arr[0]交換,第二次從arr[1]~arr[n-1]中選取最小值,與arr[1]交換,第三次從arr[2]~arr[n-1]中選取最小值,與arr[2]交換,…,

第i次從arr[i-1]~arr[n-1]中選取最小值,與arr[i-1]交換,…, 第n-1次從arr[n-2]~arr[n-1]中選取最小值,與arr[n-2]交換,

總共通過n-1次,得到一個按排序碼從小到大排列的有序序列。

3.思路分析圖

4.程式碼實現

namespace DataStructure
{
public class SelectSort
{
/// <summary>
/// 測試
/// </summary>
public static void Test()
{
int[] arr = { , , , }; System.Console.WriteLine("排序的陣列:" + ArrayToString(arr)); System.Console.WriteLine("\n優化後的陣列排序"); Sort(arr); System.Console.WriteLine("\n優化前的陣列排序"); arr = new int[] { , , , }; {
int minIndex = ; int minValue = arr[minIndex]; for (int i = ; i < arr.Length; i++)
{
if (minValue > arr[i])
{
minIndex = i; minValue = arr[i];
}
}
if (minIndex != )
{ arr[minIndex] = arr[]; arr[] = minValue; } System.Console.WriteLine("\n第一次排序後的結果:" + ArrayToString(arr));
}
{
int minIndex = ; int minValue = arr[minIndex]; for (int i = + ; i < arr.Length; i++)
{
if (minValue > arr[i])
{
minIndex = i; minValue = arr[i];
}
}
if (minIndex != )
{ arr[minIndex] = arr[]; arr[] = minValue; } System.Console.WriteLine("\n第二次排序後的結果:" + ArrayToString(arr));
}
{
int minIndex = ; int minValue = arr[minIndex]; for (int i = + ; i < arr.Length; i++)
{
if (minValue > arr[i])
{
minIndex = i; minValue = arr[i];
}
}
if (minIndex != )
{ arr[minIndex] = arr[]; arr[] = minValue; } System.Console.WriteLine("\n第三次排序後的結果:" + ArrayToString(arr));
}
} /// <summary>
/// 將陣列轉換成String
/// </summary>
/// <param name="arr"></param>
/// <returns></returns>
public static string ArrayToString(int[] arr)
{ string result = ""; for (int i = ; i < arr.Length; i++)
{
result += arr[i] + ",";
} return result;
} /// <summary>
/// 選擇排序演演算法封裝
/// </summary>
/// <param name="arr"></param>
private static void Sort(int[] arr)
{
//要迴圈幾次
for (int i = ; i < arr.Length - ; i++)
{
//假定最小值索引
int minIndex = i; //假定最小值
int minValue = arr[minIndex]; for (int j = i + ; j < arr.Length; j++)
{
//說明假定的最小值不是最小
if (minValue > arr[j])
{
//重置最小值索引
minIndex = j; //重置最小值
minValue = arr[j];
}
} //如果最小值索引不是等於當前索引,即交換
if (minIndex != i)
{
//將原本最小值索引的值,交換成當前索引的值
arr[minIndex] = arr[i]; //將當前索引的值交換成最小值
arr[i] = minValue;
} System.Console.WriteLine($"\n第{i + 1}次排序的結果:{ArrayToString(arr)}");
}
}
}
}

5.效果演示圖