選擇排序的思想很簡單,就是在陣列找到乙個最大的然後放到最後面(公升序)、最前面(降序),或者找乙個最小的放到最前面(公升序)最後面(降序)。此外還有優化方案就是從兩邊開始,同時找最大的和最小的,找的後放到正確的位置
void selectsort1(vector
& v)
int i = 0;
int j = 0;
for (i = 0; i1; i++)//控制交換的次數
}}void selectsort2(vector
& v)
int left = 0;
int right = v.size() - 1;
while (left < right)
if (v[i] < v[min])
}swap(v[left], v[min]);
if (max == left)//這裡的判斷是為了避免最大的在left這個位置,而一交換,最大的數字置就會改變。
swap(v[right], v[max]);
left++;
right--;
}}選擇排序是一種不穩定的排序(4,4,3第乙個4就會移到第二個4後面),時間複雜度為o(n^2)
堆
大堆:每個父子節點都大於孩子節點
小堆:每個父子節點都小於孩子節點
堆排序也是選擇排序的一種。如果公升序就建大堆,每次取堆頂的數往最後放(swap(heap[0],heap[end])),交換往後該堆就不是乙個大堆了(除最後乙個放好的數),從開始位置進行一次向下調整,又將其調整為乙個大堆,把堆頂與最後次位置進行交換,依次這樣進行排序。如果降序建小堆
class solution
if(a[parent]2+1;
}else}}
void sortintegers2(vector& a)
int end=a.size()-1;
while(end>0)
}*/};
此外我們也可以這樣實現堆排序
void sortintegers2(vector& v)
選擇排序(選擇排序和堆排序)
選擇排序 從序列中依次選出最小值 或者最大值 放在一側。這樣的排序叫選擇排序。這裡我們對選擇排序進行優化,一次就選出當前序列的最大值和最小值。分別放在最右端和最左端。然後left right 使得序列範圍縮小,再進行選擇最大和最小值。void selectsort int a,int n 3選擇排序...
選擇排序 選擇排序和堆排序
選擇排序 基本思想 每一趟 第i趟,i 0,1,n 2 在後面n i個待排序的資料元素集合中選出關鍵碼最小的資料元素,作為有序元素序列的第i個元素。待到第n 2趟做完,待排序元素集合中只剩下1 個元素,排序結束。一 選擇排序 每一次在一組數中選最大的放到最後,然後再在剩餘的數中選次大的數放到倒數第二...
選擇排序 (選擇排序和堆排序)
原理 每一次從無序區間選出最大 或最小 的乙個元素,存放在無序區間的最後 或最前 直到全部待排序的資料元素排完 穩定性 不穩定 1.乙個穩定的排序可以變成不穩定的排序 2.乙個本身就不穩定的是不可能變成穩定的 空間複雜度 o 1 時間複雜度 o o n 2 public static void se...