歸併排序 交換排序 選擇排序 插入排序總結

2021-08-18 04:39:19 字數 1949 閱讀 4213

一、歸併排序

遞迴實現===》自上向下

非遞迴排序===》自下向上

void merge(int arr,int low,int mid,int high,int tmp)

using namespace std;

int partition1(int arr,int low,int high)//優化1

if(i>=j)

break;

swap(arr[i],arr[j]);

} swap(arr[low],arr[j]);

} return j;

}int partition2(int arr,int low,int high)//優化2

} return j;

}int partition3(int arr,int low,int high)//優化3

} if(mark==false)

break;

}}

時間複雜度分析:假設問題規模為n

需要比較n-1趟,

第一趟比較n-1次

第二趟比較n-2次

第n-1趟比較1次

總共比較次數:1+2+3+……+n-1=(n(n-1))/2

時間複雜度為o(n^2)

穩定性:

穩定三、選擇排序

(1)、堆排序

void sink(int arr,int len,int rootindex)//下沉法進行堆調整;小堆根

if(root>arr[childindex])//*1

else

break;

} arr[rootindex]=root;//*2

/* 當實現元素交換時只進行子節點元素上移,較小的父節點是通過*2這一句實現的

*/}void heepsort(int arr,int len)

}

時間複雜度分析:假設問題規模大小為n

時間複雜度為建堆花費時間加上「刪除」最小元素花費時間之和。

i.n個元素的堆,高度為h的節點最多有n/(2^(h+1))

ii.n個元素的堆的高度為floor(log2n)(log2

n向下取整)

設高度為h的節點向下交換的代價為o(h)

建堆的時間複雜度為不同高度的每個節點向下交換的代價之和t1=(n/(2^2)+n/(2^3)+……+n/(2^(h+1)))*o(h)其中h==o(n)

故實時間複雜度為o(nlog2n)

最後兩時間相加堆排序的時間複雜度為o(nlog2n)

穩定性:

不穩定(2)、直接選擇排序

void selete_sort(vector&vec)

vec[j+gap_len]=tmp; }}

void shellsort(vector&vec)

時間複雜度:時間複雜度為o(n^1.3),實際時間複雜度為o(log2n)~o(n^2)

穩定性:

不穩定(2)、直接插入排序

void insertsort(vector&vec)

}

時間複雜度分析:假設問題規模為n

需要插入n-1次,每次插入需要比較n-1次

t(n)=1+2+3+……+n-1=(n(n-1))/2

時間複雜度為o(n^2)

穩定性:

穩定五、總結

1、平均效能為o(n^2)的有:直接插入排序、選擇排序、氣泡排序。當資料量較小時,這三種排序差不多;當資料量較大時,氣泡排序時間代價最高。

2、平均效能為o(nlog2n)的有:快速排序、歸併排序、希爾排序、堆排序。當資料量大時,這三種排序較好;當資料是隨機的時,快排平均時間最短;但在基本有序的情況下,快排反而不好;若要求穩定,則選歸併。

3、若資料初始基本有序(正序),選直接插入或者冒泡或者隨機的快排。

排序演算法 直接交換排序 歸併排序 快排

直接交換排序 遍歷未排序陣列,每次找出其中最小值,將其置入已排序的陣列中。code void select int a,int n swap a temp a i 歸併排序 分治,將乙個數字從中切開,分為兩個陣列,對兩個陣列進行排序,之後合併。code void mergearr int a,int...

氣泡排序,選擇排序,插入排序,歸併排序

1.氣泡排序 氣泡排序的思想,將陣列分為已排 右邊 和未排 左邊 兩部分。排序時每次在未排部分從左向右一次比較相鄰2個元素,如果左大於右則互換位置。每次都是指標從左邊第乙個依次相鄰比較,到指標指向倒數第二個未排結束比較。test 氣泡排序 public void fun4 int left 0 陣列...

選擇排序 氣泡排序 歸併排序 快速排序 插入排序

選擇排序 private static void selectsort int arr,int n 氣泡排序 private static void bubblesort in arr,into n 歸併排序 private static void mergesort int arr,int n p...