排序(插入排序,希爾排序,歸併排序,快速排序)

2021-08-03 22:12:39 字數 3108 閱讀 4870

1.插入排序:每一步將乙個待排序的元素按照其關鍵字值的大小插入到已排序序列的適當位置,知道待排序元素插入完為止。

(1).核心**:

void sort(int a,int n)//插入排序 

a[j] = temp;}}

(2).例題:將序列 3,1,4,1,5,9,2,6,5用插入排序排位公升序列。

#include 

void sort(int a,int n)//插入排序

a[j] = temp;

}} int main()

; sort(a,9);

for(int i = 0;i<9;i++)

}

執行結果:

2.簡單排序演算法的下界:

(1、插入排序的執行時間時o(i+n),其中i為原始陣列中的逆序數。

(2、n個互異的數的陣列平均逆序數時n(n-1)/4。

(3、通過交換相鄰元素進行排序的任何演算法平均需要 歐(n平方)時間

3.希爾排序:既有插入排序的簡單的優點,也克服了只能交換相鄰元素的缺點。

(1.主要**:

void shell_sort(int a,int n)

a[k+gap] = temp;}}}}}

(2.完整**:

#include 

void shell_sort(int a,int n)

a[k+gap] = temp;}}

}}}int main()

; shell_sort(a,5);

for(int i = 0;i<5;i++)

}

執行結果:

4.歸併排序:將兩個子串行歸併為有序的序列,運用了分而治之、遞迴的思想,排序演算法穩定。

(1.主要**:

void merge(int a,int temp,int l,int r,int rightend)

while(l <= leftend)

temp[temp1++] = a[l++];

while(r <= rightend)

temp[temp1++] = a[r++];//實際情況中只有乙個while滿足

for(int i = 0;ivoid mysort(int a,int temp,int l,int rightend)

}

(2.完整**:

#include 

void merge(int a,int temp,int l,int r,int rightend)

while(l <= leftend)

temp[temp1++] = a[l++];

while(r <= rightend)

temp[temp1++] = a[r++];//實際情況中只有乙個while滿足

for(int i = 0;ivoid mysort(int a,int temp,int l,int rightend)

}int main()

; int temp[5];

mysort(a,temp,0,4);

for(int i = 0;i<5;i++)

}

執行結果:

5.快速排序:快速排序也是一種分值的遞迴演算法,對於規模較小的排序,應採用簡單排序(如:插入、氣泡排序等),對於大規模的使用快速排序更好。

(1、主元的選取:選擇合適的主元,會使**更加優化,更快

//選主元 

int median(int a,int left,int right)

(2、核心**:

void quick_sort(int a,int left,int right)

while ( a[ --j ] > med )

if ( i < j )

swap( &a[i], &a[j] );

else

break;

}swap( &a[i], &a[ right-1 ] );

quick_sort( a, left, i-1 );

quick_sort( a, i+1, right );

}

} void quick(int a,int n)//規範排序函式

(3、完整**:

#include void swap(int *a,int *b)

//選主元

int median(int a,int left,int right)

void quick_sort(int a,int left,int right)

while ( a[ --j ] > med )

if ( i < j )

swap( &a[i], &a[j] );

else

break

; }

swap( &a[i], &a[ right-1 ] );

quick_sort( a, left, i-1 );

quick_sort( a, i+1, right );

}

} void quick(int a,int n)//規範排序函式

int main()

; quick(a,5);

for(int i = 0

;i<5;i++)

}

執行結果:

插入排序,希爾排序,歸併排序

public class mainclass shellsort1 arr foreach var item in arr console.readkey static void shellsort1 int arr arr j step temp step step 2 static void i...

氣泡排序,插入排序,堆排序,歸併排序,希爾排序

感謝姥姥提供模板 感謝姥姥 展示 include include using namespace std 氣泡排序 void bubble sort int arr,int n 插入排序 void insertionsort int arr,int n arr i tmp 希爾排序 void she...

插入排序 歸併排序

插入排序 define len 5 int a len void insertion sort void int i,j,k for j 1 j len j k a j i j 1 while i 0 a i k a i 1 a i i a i 1 k 歸併排序 int a 8 void merge...