排序演算法二氣泡排序和快排

2021-08-04 18:36:12 字數 1627 閱讀 7243

氣泡排序想必大家都非常熟悉了,這裡就直接貼**了

void bubblesort(int

array,int

len)

}if(flag == 1)

break;

}}

時間複雜度為o(n*n),最好的情況下:優化後正序有序為o(n),穩定的演算法。

沒有優化的與原始序列的狀態無關,優化後與原始序列的狀態有關

//paration版本一:挖坑法

int paration(int

array, int left, int right)

swap(array[left], array[right]);

while((left < right) && (array[right] >= key))

swap(array[left], array[right]);

}return left;

}//paration版本二:雙指標法

int paration2(int

array, int left, int right)

++pcur;

}return pre;

}void quicksort(int

array, int left ,int right)

}

非遞迴實現:

void quicksort2(int

array, int left, int right)

}}

優化:

1)三數取中法

2)當區間已經劃分到很小的時候可以改用插入排序

3)尾遞迴減少遞迴次數

//三數取中法,防止取到極端資料

int middle(int

array, int left, int mid, int right)

else

}//paration版本二:雙指標法

int paration2(int

array, int left, int right)

++pcur;

}return pre;

}void insertsort(int

array, int size)

array[end+1] = temp;

}}void quicksort(int

array, int left ,int right)

if(right-left <= 5) //當分成很小的區間時,插入排序效率更高。

}

時間複雜度為o(n*lgn),最好情況為o(n*lgn),最壞情況o(n*n),因為遞迴空間複雜度o(lgn)

不穩定的演算法

最壞的情況下:基本有序時,退化為氣泡排序,幾乎要比較n*n次,故為o(n*n)

它的應用場景是大規模的資料排序

快速排序演算法的實際執行效能依賴與切分是否均衡,當正好把陣列從中間」切開」時,

快速排序的實際效能最好。

切分越不均衡快速排序的實際效能就越差,

最壞情況下(第一次選取的切分元素是陣列裡最小的,第二次的切分元素是第二小的…)

演算法的時間複雜度會退化到o(n^2)。

排序演算法(快排,冒泡)

排序目的 快速查詢 排序演算法優劣的判斷條件 1.時間複雜度 2.空間複雜度 3.穩定性 關鍵字值相等的數字們,排完序之後順序不變 十大排序演算法 需要掌握的的 氣泡排序 快速排序 希爾排序 折半插入排序 堆排序 氣泡排序 依次比較第i個數與第i 1個數的大小,如果符合條件則不變,如果不符合條件,兩...

氣泡排序和快排

1.氣泡排序 氣泡排序要點 1 兩層迴圈,外層迴圈控制走訪數列重複進行的次數,內層迴圈進行資料的比較 交換,是資料 上浮 2 內層迴圈是相鄰的資料進行比較。var bubblesort function arr console.log arr 1,1,2,3,4,6,7,8 bubblesort 1...

排序演算法 氣泡排序 快排 歸併排序

氣泡排序 bubble sort 也是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。步驟 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同...