(本文中為從小到大排序)
最常用的排序演算法了,從第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 氣泡排序就是說,排序的過程像水裡往上冒的氣泡一樣,每個數字代表乙個氣...