資料結構之排序 Sort

2021-09-26 22:53:07 字數 2577 閱讀 6050

內排序:  全部在記憶體裡實現的成為內排序.

外排序: 不僅需要記憶體還需要外存成為排序.

五大分類: 插入排序,選擇排序,交換排序,分配排序,歸併排序;

1.1 直接插入排序:

從小到大: 時間複雜度: o(

void directinsertionsort(int a,int n)

a[j] = temp;

}}

1.2 折半插入排序:

時間複雜度: o(

void binaryinsertionsort(int a,int n)

a[l] = temp; // 插進去

}}

1.3 希爾排序(shell)

分組,  組內一般採用直接插入法,

時間複雜度: o(

void shellsort(int a,int n,int s)

a[j+k] = temp; // 插入

} }}

2.1 直接選擇排序:

每次從中選擇最小的依次排序:

時間複雜度:o(

void directselectsort(int a,int n)

if( i!= temp)}}

2.2 樹形選擇排序:(競賽樹排序,或勝者樹)

時間複雜度: o(nlogn)   不穩定的;

**-> 堆排序;

1.1 氣泡排序:

最簡單的, 時間複雜度: o(

void bubblesort(int a,int n)

} }}

3.2 快速排序:

時間複雜度: o(nlogn)   不穩定的;

遞迴實現:

void quicklysort(int a,int low ,int high)

} if( l < high) quicklysort(a,l,high);

if( r > low) quicklysort(a,low,r);

}

非遞迴實現:  用棧 (stack)

void quicksortofstack(int a,int low, int high)

} if( l < temphigh) s.push(temphigh),s.push(l);

if( r > templow ) s.push(r),s.push(templow);

}}

四: 分配排序:

4.1 基數排序:

鍊錶, 克服順序儲存所存在的空間和時間耗費問題.

時間複雜度:o(

typedef struct forsort

forsort;

void radixsort(forsort *pdata,int clow,int chigh,int d)

templink;

int r = chigh - clow +1 ;

templink *tlink;

forsort *p;

int j;

tlink = new templink[sizeof(templink)*r];

for(int i = d-1 ; i >= 0; i--)

for(p = pdata; p!=null; p = p->next)

}int j = 0;

while(tlink[j].phead ==null) j++;

pdata = tlink[j].phead;

p = tlink[j].ptail;

for(int k = j+1; k < r ; k++)

}p->next = null;

} for( p = pdata; p!=null; p = p->next)

free(tlink);

}

4.2 歸併排序: 

一般採用二路歸併排序: 

時間複雜度o(nlogn)

穩定

void twowaymerge(int dst,int src,int s, int e1,int e2)

if( s1 <= e1)

memcpy(&dst[s],&src[s1],(e1-s1+1)*sizeof(int));

else

memcpy(&dst[s],&src[s2],(e2-s2+1)*sizeof(int));

}void onepassmerge(int dst,int src,int len , int n)

/* 還有剩餘 最多還倆2 */

if(i < n-len)

else

memcpy(&dst[i],&src[i],(n-i)*sizeof(int));/* 還有乙個 直接複製過去*/

}int b[120];

/* 二路歸併排序*/

void mergesort(int a,int n)

else

}}

資料結構之排序

在待排序的檔案中,若存在多個關鍵字相同的記錄,經過排序後這些具有相同關鍵字的記錄之間的相對次序保持不變,該排序方法是穩定的 若具有相同關鍵字的記錄之間的相對次序發生變化,則稱這種排序方法是不穩定的。穩定的排序 時間複雜度 空間複雜度 氣泡排序 最差和平均是o n2 最好是o n 1 雙向氣泡排序 最...

資料結構之排序

package com.small 注意a 0 是否有意思,書上c語言基本都是將a 0 作為哨兵,那麼0號元素不能用,我這裡全部是flag代替 author small leaf public class sort else for j i 1 j high 1 j a high 1 flag 希爾...

資料結構之排序

常用的幾種排序方法 冒泡 插入 選擇 快排 歸併排序 1 冒泡 以公升序為例,也是有兩種思路,1 num 0 依次與後面比較將最小的放到第一位 2 將最大的放到最後一位。我比較習慣用第一種 1 include include using namespace std int main for int ...