快排優化 1

2022-10-10 14:30:12 字數 1232 閱讀 7575

#include#define max 100  //儲存的最大值

void swap(int *a,int *b)

int numberofthree(int arr, int head, int end)

if (arr[head] > arr[end])

if (arr[mid] > arr[head])

//此時,arr[mid] <= arr[head] <= arr[end]

return arr[head];

}int sort(int a, int head, int end)

a[head] = standard;

return end;

}void circle(int a, int head, int end)

}void print(int a, int n)

int main()

i.由《資料結構與演算法分析》(mark allen weiness所著)可知,當待排序列長度為5~20之間,此時使用插入排序能避免一些有害的退化情形。

ii.插入排序

void insertion_sort(int arr, int len)

arr[j+1] = key;}}

iii.完整**
#include#define max 100  //儲存的最大值

void insertsort(int a, int n)

a[j + 1] = key; }}

void swap(int *a,int *b)

int numberofthree(int arr, int head, int end)

if (arr[head] > arr[end])

if (arr[mid] > arr[head])

//此時,arr[mid] <= arr[head] <= arr[end]

return arr[head];

}int sort(int a, int head, int end)

a[head] = standard;

return end;

}void circle(int a, int head, int end) }}

void print(int a, int n)

int main()

參考圖

快排及優化

快速排序的本質就是選取乙個基準數,通過一次快排把基準數大的都放在基準數的左邊,把比基準數小的放在基準數的右邊,這樣就找到了基準數在陣列中的正確位置。然後可以用遞迴的方式分別對前半部分和後半部分排序,最終實現整體陣列有序。所謂排序的穩定性,就是指在排序過程中,在對某關鍵字排序後會不會改變其他關鍵字的順...

快排的幾種優化方案

先來複習下找基準的方法 public static int partion int arr,int start,int end if start end else while start end arr start tmp if start end else arr start tmp return...

快排的優化 參照SGI STL sort

快排,大家都知道,時間複雜度最好情況是o nlogn 最差情況是o n 雖然平均情況下是o nlogn 中最好的,因為係數 k 比較小,但是最差情況卻讓我們直搖頭,所以還有優化的空間。快排的兩個優化點 1 當排序個數較少時,改為插入排序,減少遞迴的呼叫次數 2 當有惡化為最差情況時,改用堆排序 接下...