一、選擇排序:選擇排序是一種最簡單直觀的排序算法。首先在未排序數列中找到最大(小)的元素,存放到排序數列的起始(結束)位置,再從剩余的排序元素中繼續尋找最大(小)的元素,然后放在已排序元素的末尾(前面)。以此類推,直到所有元素排序完成。代碼如下:
/// <summary> /// 選擇排序(從小到大) /// </summary> /// <param name="list">待排序數組</param> public static int[] SelectionSort(int[] list) { int min; //存儲最小元素 int minIndex; //存儲最小元素的索引 int temp; int i, j; int len = list.Length; //數組長度 for (i = 0; i < len - 1; i++) { min = list[i]; minIndex = i; for (j = i; j < len; j++) { if (list[j] < min) { min = list[j]; minIndex = j; } } if (minIndex > i) //交換元素,把最小的元素放在最前面 { temp = list[i]; list[i] = min; list[minIndex] = temp; } } return list; }二、冒泡排序:冒泡排序是一種交換排序。它重復的走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤則把它們交換過來。走訪數列的工作是重復進行直到沒有元素交換,也就說明已完成排序。代碼如下:
/// <summary> /// 冒泡排序(從小到大) /// </summary> /// <param name="list">待排序數組</param> /// <returns></returns> public static int[] BubbleSort(int[] list) { int i, j; int temp; int len = list.Length; int exchange = len - 1; //記錄發生交換的位置 while (true) { int bound = exchange; exchange = 0; //假定本趟比較沒有元素交換 for (i = 0; i < bound; i++) { j = i + 1; if (list[i] > list[j]) //交換元素,值大的元素后移 { temp = list[i]; list[i] = list[j]; list[j] = temp; exchange = i; } } if (exchange == 0) //本趟比較沒有發生元素交換則說明已經排序好 { break; } } return list; }三、插入排序:插入算法首先把要排序的數組分成兩部分:第一部分為未排序數據包含了這個數組的所有元素,但最后一個元素除外,而第二部分為已排序數據就只包含這一個元素。對于未排序數據,在已排序序列中從后向前掃描,找到相應位置并插入。代碼如下:
/// <summary> /// 插入排序(從小到大) /// </summary> /// <param name="list">待排序數組</param> /// <returns></returns> public static int[] InsertionSort(int[] list) { int i, j; int temp; int len = list.Length; for (i = 1; i < len; i++) { j = i - 1; temp = list[i]; while (j>=0 && list[j]>temp) { list[j + 1] = list[j]; j--; } list[j+1] = temp; //被排序的數放到正確的位置 } return list; }代碼下載
新聞熱點
疑難解答