經典排序演算法C

2021-08-21 10:26:54 字數 2000 閱讀 7521

氣泡排序:

依次比較相鄰的兩個元素,如果前者大於後者,則交換順序。第一趟完成後最後的元素是最大的,然後針對所有的元素重複以上的步驟,除了最後乙個。時間複雜度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...