#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 在某次遍歷中如果沒有資料交換,說明整個陣列已經有序。因此通過設定標誌位來記錄此次遍歷有無資料交換就可以判斷...