選擇排序(選擇排序和堆排序)

2021-08-03 17:12:19 字數 895 閱讀 7310

選擇排序

從序列中依次選出最小值(或者最大值)放在一側。這樣的排序叫選擇排序。

這裡我們對選擇排序進行優化,一次就選出當前序列的最大值和最小值。分別放在最右端和最左端。然後left++,

right

--。使得序列範圍縮小,再進行選擇最大和最小值。

void selectsort(int*a, int n)// 3選擇排序

} swap(a[left], a[min]);

if (max == left)

swap(a[right-1], a[max]);

++left;

--right;

}}

選擇排序任何情況下時間複雜度都是o(n^2),但它是穩定的一種排序演算法。

堆排序

如果要從小到大的序列。則我們需要建立大堆-->取堆的top和堆最後乙個資料交換(最大的數放在了最後面)--->因為交換之後,不再是大堆,進行向下調整演算法,繼續是大堆---->迴圈取top和最後數交換

void adjustdown(int* a, int i,int n)// 4 -向下調整演算法

if (a[child]>a[parent])

else

}}void heap(int*a, int n)//4 堆排序

int end=n-1;

while (end)

}

堆排的時間複雜度是n*logn,是不穩定的排序。

選擇排序 選擇排序和堆排序

選擇排序 基本思想 每一趟 第i趟,i 0,1,n 2 在後面n i個待排序的資料元素集合中選出關鍵碼最小的資料元素,作為有序元素序列的第i個元素。待到第n 2趟做完,待排序元素集合中只剩下1 個元素,排序結束。一 選擇排序 每一次在一組數中選最大的放到最後,然後再在剩餘的數中選次大的數放到倒數第二...

選擇排序 (選擇排序和堆排序)

原理 每一次從無序區間選出最大 或最小 的乙個元素,存放在無序區間的最後 或最前 直到全部待排序的資料元素排完 穩定性 不穩定 1.乙個穩定的排序可以變成不穩定的排序 2.乙個本身就不穩定的是不可能變成穩定的 空間複雜度 o 1 時間複雜度 o o n 2 public static void se...

排序 選擇排序 選擇排序 堆排序

寫在前面 上傳github交換排序選擇排序 堆排序 選擇排序 顧名思義,我們就可以猜到,它是原則合適的元素放到合適的位置 從圖中,我們可以得到 1.用第乙個元素,和其他所有的元素進行比較,找出最小的,然後進行交換 2.然後進行,資料的遞增 3.直到資料全部有序 void selectsort int...