7大常用排序演算法總結

2021-09-24 15:31:37 字數 2255 閱讀 9952

(本文中為從小到大排序)

最常用的排序演算法了,從第1個數開始,和下乙個數進行比較,假如下乙個數小,則交換這兩個數的位置,第一趟排序得到陣列的最大值,第二趟排序得到次最大值,依次列推,若一趟比較中沒有交換,則陣列已經正序排列。排序結束。

最好的情況:正序排列,時間複雜度o(n);

最差的情況:逆序排列,時間複雜度o(nn);

平均時間複雜度:o(nn);

**如下:

void bubble(int array,int length)//every time it gets a biggest number

} if (!flag) break;//假如某次排序沒有交換,則說明已經正序

} return;

}

第一遍從n個數中選出最小的數,記錄他的位置,和第乙個數交換;然後再n-1個數中選出最小的數,記錄位置,和第二個數交換。以此類推,直到最後乙個數。

最好的情況,最壞的情況,平均情況:o(n*n);

void select(int array, int length)

j++;

} if (min != i) swap(array[i], array[min]);

} return;

}

直接插入排序就是從第二個數開始,往前插入到合適的位置(如果小於某個位置的數,繼續向前,直到大於或等於)。

最好的情況:正序排列o(n);

最壞的情況:逆序排列o(nn);

平均情況:o(nn);

**如下:

void insert(int array, int length)//every time it gets a smallest number

} small++;

swap(array[small], array[end]);

return small; }

void quick(int array, int start,int end)

也是一種選擇排序,但是是分區域來進行排序,先選擇乙個增量,對對應的增量進行排序,然後逐步減小增量,直到最後增量為1時,幾乎已經是排好序的序列了。

最好的情況:o(nlogn);

最壞的情況:o(nlogn);

平均情況:o(n*logn);

**如下:

void herl(int array, int length)

} return;

}

歸併排序和快排類似,不過歸併排序是把陣列直接分成前後兩個部分進行排序,然後前後兩個陣列再繼續分成兩個陣列,直到有序。每次排好的部分按順序放進乙個新的陣列中,最後把這個陣列一一賦值出傳遞給原陣列得到有序陣列。

最好的情況:o(nlogn);

最壞的情況:o(nlogn);

平均情況:o(n*logn);

**如下:

void mergetwo(int array, int start, int mid,int end, int *temp)

else

temp[k++] = array[j++];

} while (i <= mid) temp[k++] = array[i++];

while (j <= end) temp[k++] = array[j++];

for (int i = start; i <= end; i++) }

void mergecore(int array, int start, int end, int *temp)

void merge(int array, int length)

堆排序首先需要把陣列建立成乙個最大堆,然後交換堆頂和堆的最後乙個數,然後去掉最後乙個數,繼續調整陣列為最大堆,再交換堆頂和堆的最後乙個數,直到陣列有序。

最好的情況:o(nlogn);

最壞的情況:o(nlogn);

平均情況:o(n*logn);

**如下:

void maxheap(int array, int start, int end)

}void heap(int array, int length)

return;

}

排序演算法大總結

思路 從最左邊的元素開始,逐個遍歷,找到這一趟中的最小值,存到minindex裡面,最後這一趟結束,將它和這一趟開始遍歷的位置i上的元素swap,直到最後乙個位置上也就位。相當於選擇出每一趟最小的元素,然後把它放到這一趟開始的地方。基礎版 void selectionsort int arr,int...

常用排序演算法總結7一一堆排序

在了解堆排序之前,我們有必要清楚 什麼是堆呢?堆 英語 heap 是電腦科學中一類特殊的資料結構的統稱。堆通常是乙個可以被看做一棵樹的陣列物件。在佇列中,排程程式反覆提取佇列中第乙個作業並執行,因為實際情況中某些時間較短的任務將等待很長時間才能結束,或者某些不短小,但具有重要性的作業,同樣應當具有優...

常用排序演算法總結

總結些常見的排序演算法,方便以後可以重用。資料量不大,為了表達方便就直接使用了陣列。int data null data new int 1.氣泡排序 氣泡排序,從小到大排序 for int i 0 i data.length i 氣泡排序就是說,排序的過程像水裡往上冒的氣泡一樣,每個數字代表乙個氣...