快速排序之所以比較快,是因為相比氣泡排序,每次交換是跳躍式的。每次排序的時候設定乙個基準點,將小於等於基準點的數全部放到基準點的左邊,將大於等於基準點的數全部放到基準點的右邊。這樣在每次交換的時候就不會像氣泡排序一樣只能在相鄰的數之間進行交換,交換的距離就大得多了。因此總得比較和交換次數就少了。速度自然就提高了。當然在最壞的情況下,仍可能是相鄰的兩個數進行交換,此時快速排序的最差時間複雜度和氣泡排序是一樣,都是o(n²),他的平均時間複雜度為o(nlogn)。
這裡交換時運用的指標交換法,還可以挖坑法。
除了用遞迴,還可以用棧。
#include
int a[101],n; //定義全域性變數,以便在排序函式中也能使用
void quicksort(int left,int right);
int main()
quicksort(1,n);
for(i=1;i<=n;i++)
printf("%d",a[i]);
return 0;
}void quicksort(int left,int right)
}a[left] = a[i];
a[i] = temp; //把基準數歸位
quicksort(left,i-1);
quicksort(j+1,right); //遞迴
return ;
}
快速排序(啊哈演算法)
include include using namespace std int a 101 n void quicksort int left,int right quicksort 1,n for i 1 i n i while arr i temp ii 這裡兩個while的順序是不能改變的,想...
快速排序(啊哈演算法)
include include using namespace std int a 101 n void quicksort int left,int right quicksort 1,n for i 1 i n i while arr i temp ii 這裡兩個while的順序是不能改變的,想...
啊哈!演算法 1 1 快速排序
1.基本思路 就是選定乙個基準數,然後從兩端開始同時像中間探測,如果是要公升序排序,且選定第乙個為基準數的話,則當後面探測到比基準數小的就停下,然後就讓前面的走,前面當探測到比基準數大的就停下,然後交換,最後兩個探測針相遇時,就跳出迴圈,並且讓基準數放到中間去。2.注意事項 注意,在讓前面和後面探測...