七大排序演算法

2021-10-09 18:43:15 字數 4243 閱讀 6926

#include

/*插入排序*/

void

insertsort

(int arr,

int len)

arr[preindex +1]

= current;}}

intmain()

;int len =

sizeof

(beauties)

/sizeof

(beauties[0]

);insertsort

(beauties, len)

;for

(int i =

0; i < len; i++

)system

("pause");

return0;

}

#include

//採用分治思想

//每次迴圈把n個元素分解成n/2個子序列

//用合併排序法堆兩個子串行遞迴排序

//合併兩個已排序的子串行

// 6,5,3,1,8,7,2,4

// 分解

// 6,5,3,1 8,7,2,4

// 6,5 3,1 8,7 2,4

// 6 5 3 1 8 7 2 4

// 合併排序

// 5,6 1,3 7,8 2,4

// 1,3,5,6 2,4,7,8

// 1,2,3,4,5,6,7,8

void

mergeadd_demo

(int arr,

int left,

int mid,

int right)

;int i = left;

//指向左邊陣列最小的元素位置

int j = mid;

//指向右邊陣列最小的元素位置

int k =0;

//臨時陣列下標

while

(ielse

}while

(i < mid)

while

(j <= right)

//把temp中得到內容拷貝到arr陣列中

memcpy

(arr + left, temp,

sizeof

(int)*

(right - left +1)

);}void

mergeadd

(int arr,

int left,

int mid,

int right,

int*temp)

else

}while

(i < mid)

while

(j <= right)

//把temp中得到內容拷貝到arr陣列中

memcpy

(arr + left, temp,

sizeof

(int)*

(right - left +1)

);}//細分成單個資料,兩兩進行歸併

void

mergesort

(int arr,

int left,

int right,

int*temp)

}int

main()

;int len =

sizeof

(beauties)

/sizeof

(beauties[0]

);int*temp =

newint

[len]

;mergesort

(beauties,

0, len -

1, temp)

;for

(int i =

0; i < len; i++

)system

("pause");

return0;

}

#include

//選擇第乙個數為基準數,已基準為中心將小於它的排在前面,大於等於它的排在後面

intpartition

(int arr,

int low,

int high)

if(i < j)

//右邊已經找到小於基數的數

while

(i < j && arr[i]

< base)

if(i < j)

//左邊邊已經找到大於基數的數

arr[i]

= base;

}return i;}}

void

quicksort

(int

*arr,

int low,

int high)

}int

main()

;int len =

sizeof

(beauties)

/sizeof

(beauties[0]

);quicksort

(beauties,

0, len-1)

;for

(int i =

0; i < len; i++

)system

("pause");

return0;

}

#include

//交換

void

swap

(int

&num1,

int&num2)

void

bubblesort

(int arr,

int len)}if

(sorted)

break;}

}int

main()

;int len =

sizeof

(beauties)

/sizeof

(beauties[0]

);bubblesort

(beauties, len)

;for

(int i =

0; i < len; i++

)system

("pause");

return0;

}

#include

/*希爾排序*/

//無需大幅移動資料即可完成整個陣列的排序

//相當於插入排序的優化

void

shellsort

(int arr,

int len)

arr[j + gap]

= current;}}

}int

main()

;int len =

sizeof

(beauties)

/sizeof

(beauties[0]

);shellsort

(beauties, len)

;for

(int i =

0; i < len; i++

)system

("pause");

return0;

}

#include

using

namespace std;

//交換兩個變數的值

void

swap

(int

*num1,

int*num2)

void

selectsort1

(int arr,

int len)}if

(max !=

(len - i -1)

)}}void

selectsort2

(int arr,

int len)

}swap

(&arr[min]

,&arr[i]);

//和第乙個交換}}

intmain()

;int len =

sizeof

(beauties)

/sizeof

(beauties[0]

);selectsort1

(beauties, len)

;for

(int i =

0; i < len; i++

)system

("pause");

return0;

}

七大排序演算法

氣泡排序 void bubble int a,int n 選擇排序 void select sort int a,int n n為陣列a的元素個數 將第i 小的數,放在第i 個位置 如果剛好,就不用交換 if i min index 插入排序 typedef int elementtype void...

七大排序演算法

七大排序分類 插入排序 直接插入排序 穩定 希爾排序 不穩定 選擇排序 簡單選擇排序 穩定 堆排序 不穩定 交換排序 氣泡排序 穩定 快速排序 不穩定 歸併排序。直接插入排序 時間複雜度 o n 2 演算法穩定性 穩定void straightinsertsort int a,int n 氣泡排序 ...

七大排序演算法

首先回顧下各種排序的主要思路 一 氣泡排序 氣泡排序主要思路是 通過交換使相鄰的兩個數變成小數在前大數在後,這樣每次遍歷後,最大的數就 沉 到最後面了。重複n次即可以使陣列有序。氣泡排序改進1 在某次遍歷中如果沒有資料交換,說明整個陣列已經有序。因此通過設定標誌位來記錄此次遍歷有無資料交換就可以判斷...