氣泡排序:
依次比較相鄰的兩個元素,如果前者大於後者,則交換順序。第一趟完成後最後的元素是最大的,然後針對所有的元素重複以上的步驟,除了最後乙個。時間複雜度n^2
void bubblesort(vector& arr)
} }}
選擇排序:
在序列中,找到最小元素,放到序列的起始位置作為已排序序列;然後,再從剩餘未排序元素中繼續尋找最小元素,放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
void selectionsort(vector& arr)
}arr[index] = arr[i];
arr[i] = min;}}
插入排序:
1.從第乙個元素開始,該元素可以認為已經被排序
2.取出下乙個元素,在已經排序的元素序列中從後向前掃瞄
3.如果該元素(已排序)大於新元素,將該元素移到下一位置
4.重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
5.將新元素插入到該位置中
6.重複步驟2
void insertionsort (vector& arr)
arr[j+1] = temp;}}
快速排序:
選定第乙個數作為基準,將設定左右兩個指標,目標是將比基準數大的數放在右邊,小的數放在左邊,如果有不滿足的條件的,則兩個指標交換,直到兩個指標重合,將此時所指的數和基準數交換。
void quicksort(vector& arr, int left, int right)
} arr[left] = arr[i];
arr[i] =temp;
quicksort(arr, left, i - 1); // 遞迴呼叫
quicksort(arr, i + 1, right);
}
堆排序:
堆是具有以下性質的完全二叉樹:每個結點的值都大於或等於其左右孩子結點的值,稱為大頂堆;或者每個結點的值都小於或等於其左右孩子結點的值,稱為小頂堆。
大頂堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2]
小頂堆:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2]
堆排序的基本思路:
a.將無序序列構建成乙個堆,根據公升序降序需求選擇大頂堆或小頂堆;
b.將堆頂元素與末尾元素交換,將最大元素"沉"到陣列末端;
c.重新調整結構,使其滿足堆定義,然後繼續交換堆頂元素與當前末尾元素,反覆執行調整+交換步驟,直到整個序列有序。
class solution
if(temp >= arr[i])
arr[start] = arr[i]; //將子節點上移
start = i; //下一輪篩選
}arr[start] = temp; //插入正確的位置
}void heapsort(vector& arr)
for(int i=arr.length-1; i>=0; i--)
}void swap(vector& arr, int i, int j)
}
排序演算法的穩定性:如果ai = aj,排序前ai在aj之前,排序後ai還在aj之前,則稱這種排序演算法是穩定的。通俗地講就是保證排序前後兩個相等的數的相對順序不變。
經典排序演算法C 實現
用c 實現了經典的氣泡排序 插入排序 選擇排序 堆排序 快速排序 希爾排序 歸併排序。等空閒的時候再補充每個排序演算法的思想以及易錯點。氣泡排序 void bubble sort vector arr,int n if swaped 0 break else swaped 0 插入排序 withou...
總結 經典排序演算法 C )
最近在學習演算法,趁這個機會總結一些演算法。慢慢更新,歡迎交流 排序 輸入 n個數 輸出 有序 從大到小 從小到大 序列 一 插入排序 做排序的都需要做遍歷,而插入排序,顧名思義,就是插隊。不必多說,給個案例體會一下 輸入 5 4 3 2 1 處理 輸出 1 2 3 4 5 輸入 6 8 2 4 5...
經典排序演算法(C 實現)
氣泡排序 public static int bubblesort int array return array 選擇排序 1.從左至右遍歷,找到最小 大 的元素,然後與第乙個元素交換。2.從剩餘未排序元素中繼續尋找最小 大 元素,然後與第二個元素進行交換。3.以此類推,直到所有元素均排序完畢。pu...