氣泡排序想必大家都非常熟悉了,這裡就直接貼**了
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 也是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。步驟 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同...