# å¿«éæåº å¿«éæåºæ¯ç±ä¸å°¼Â·éå°æåå±çä¸ç§æåºç®æ³ãå¨å¹³åç¶åµä¸ï¼æåº n 个项ç®è¦ Î(nlogn) 次æ¯è¾ã卿åç¶åµä¸åéè¦ Î(n2) 次æ¯è¾ï¼ä½è¿ç§ç¶åµå¹¶ä¸å¸¸è§ãäºå®ä¸ï¼å¿«éæåºéå¸¸ææ¾æ¯å ¶ä» Î(nlogn) ç®æ³æ´å¿«ï¼å 为å®çå é¨å¾ªç¯ï¼inner loopï¼å¯ä»¥å¨å¤§é¨åçæ¶æä¸å¾ææçå°è¢«å®ç°åºæ¥ã å¿«éæåºä½¿ç¨åæ²»æ³ï¼Divide and conquerï¼çç¥æ¥æä¸ä¸ªä¸²è¡ï¼listï¼å为两个å串è¡ï¼sub-listsï¼ã å¿«éæåºåæ¯ä¸ç§åèæ²»ä¹ææ³å¨æåºç®æ³ä¸çå ¸ååºç¨ãæ¬è´¨ä¸æ¥çï¼å¿«éæåºåºè¯¥ç®æ¯å¨å泡æåºåºç¡ä¸çéå½åæ²»æ³ã å¿«éæåºçååèµ·çæ¯ç®åç²æ´ï¼å 为ä¸å¬å°è¿ä¸ªååä½ å°±ç¥éå®åå¨çæä¹ï¼å°±æ¯å¿«ï¼è䏿çé«! 宿¯å¤çå¤§æ°æ®æå¿«çæåºç®æ³ä¹ä¸äºãè½ç¶ Worst Case çæ¶é´å¤æåº¦è¾¾å°äº O(n²)ï¼ä½æ¯äººå®¶å°±æ¯ä¼ç§ï¼å¨å¤§å¤æ°æ åµä¸é½æ¯å¹³åæ¶é´å¤æåº¦ä¸º O(n logn) çæåºç®æ³è¡¨ç°è¦æ´å¥½ï¼å¯æ¯è¿æ¯ä¸ºä»ä¹å¢ï¼æä¹ä¸ç¥éã好卿ç强迫çåç¯äºï¼æ¥äºNå¤èµæç»äºå¨ãç®æ³èºæ¯ä¸ä¿¡æ¯å¦ç«èµã䏿¾å°äºæ»¡æççæ¡ï¼ > å¿«éæåºçæåè¿è¡æ 嵿¯O(n²)ï¼æ¯å¦è¯´é¡ºåºæ°åçå¿«æãä½å®çå¹³ææææ¶é´æ¯O(n log n) ï¼ä¸O(n log n)è®°å·ä¸éå«ç常æ°å åå¾å°ï¼æ¯å¤æåº¦ç¨³å®çäºO(n log n)çå½å¹¶æåºè¦å°å¾å¤ãæä»¥ï¼å¯¹ç»å¤§å¤æ°é¡ºåºæ§è¾å¼±çéæºæ°åèè¨ï¼å¿«éæåºæ»æ¯ä¼äºå½å¹¶æåºã ## 1. ç®æ³æ¥éª¤ 1. 仿°å䏿åºä¸ä¸ªå ç´ ï¼ç§°ä¸º âåºåâï¼pivotï¼; 2. éæ°æåºæ°åï¼ææå ç´ æ¯åºåå¼å°çææ¾å¨åºååé¢ï¼ææå ç´ æ¯åºåå¼å¤§çæå¨åºåçåé¢ï¼ç¸åçæ°å¯ä»¥å°ä»»ä¸è¾¹ï¼ãå¨è¿ä¸ªååºéåºä¹åï¼è¯¥åºåå°±å¤äºæ°åçä¸é´ä½ç½®ãè¿ä¸ªç§°ä¸ºååºï¼partitionï¼æä½; 3. éå½å°ï¼recursiveï¼æå°äºåºåå¼å ç´ çåæ°åå大äºåºåå¼å ç´ çåæ°åæåº; éå½çæåºé¨æ å½¢ï¼æ¯æ°åç大尿¯é¶æä¸ï¼ä¹å°±æ¯æ°¸è¿é½å·²ç»è¢«æåºå¥½äºãè½ç¶ä¸ç´éå½ä¸å»ï¼ä½æ¯è¿ä¸ªç®æ³æ»ä¼éåºï¼å ä¸ºå¨æ¯æ¬¡çè¿ä»£ï¼iterationï¼ä¸ï¼å®è³å°ä¼æä¸ä¸ªå ç´ æå°å®æåçä½ç½®å»ã ## 2. å¨å¾æ¼ç¤º  ## 3. JavaScript 代ç å®ç° ```js function quickSort(arr, left, right) { var len = arr.length, partitionIndex, left = typeof left != 'number' ? 0 : left, right = typeof right != 'number' ? len - 1 : right; if (left < right) { partitionIndex = partition(arr, left, right); quickSort(arr, left, partitionIndex-1); quickSort(arr, partitionIndex+1, right); } return arr; } function partition(arr, left ,right) { // ååºæä½ var pivot = left, // 设å®åºåå¼ï¼pivotï¼ index = pivot + 1; for (var i = index; i <= right; i++) { if (arr[i] < arr[pivot]) { swap(arr, i, index); index++; } } swap(arr, pivot, index - 1); return index-1; } function swap(arr, i, j) { var temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } ```