by 洪翠憶
快樂影片:D
快樂遊戲:D
幫每個位置,選擇該放的值。
– 選擇排序法
int arr[10] = {3, 5, 2, 7, 1, 4, 6, 8, 9, 0};
void selection_sort(){
for(int i = 0; i < 10; i++){
int mini = arr[i], point = i;
for(int j = i; j < 10; j++){
if(arr[j] < mini){
mini = arr[j];
point = j;
}
}
std::swap(arr[i], arr[point]);
}
}
像泡沫那樣,大顆的泡泡會先浮上去。
– 泡沫排序法
int arr[10] = {3, 5, 2, 7, 1, 4, 6, 8, 9, 0};
void selection_sort(){
for(int i = 0; i < 9; i++){
for(int j = 0; j < 9-i; j++){
if(arr[j] > arr[j+1]){
std::swap(arr[j], arr[j+1]);
}
}
}
}
從第二個數字開始,幫每個值插入正確的位置。
– 插入排序法
int arr[10] = {3, 5, 2, 7, 1, 4, 6, 8, 9, 0};
void insertion_sort(){
for(int i = 1; i < 9; i++){
int ins = arr[i], j = i-1;
while(j >= 0 && arr[j] > ins){
std::swap(arr[j], arr[j+1]);
j--;
}
arr[j+1] = ins;
}
}
(有興趣深入了解的話,可以自己上網查www)
#include <algorithm>
⋮
std::sort(迭代器的頭, 迭代器的尾, 排序規則(選填));
#include <algorithm>
#include <iostream>
int arr[10] = {3, 5, 2, 7, 1, 4, 6, 8, 9, 0};
int main(){
for(int i = 0; i < 10; i++) //輸出原本的排序
std::cout << arr[i] << ' ';
std::cout << '\n';
std::sort(arr, arr+10); //排序
for(int i = 0; i < 10; i++)//輸出排序好的排序
std::cout << arr[i] << ' ';
return 0;
}
#include <algorithm>
#include <iostream>
int arr[10] = {3, 5, 2, 7, 1, 4, 6, 8, 9, 0};
bool mycomp(int a, int b){
return a > b;
}
int main(){
for(int i = 0; i < 10; i++) //輸出原本的排序
std::cout << arr[i] << ' ';
std::cout << '\n';
std::sort(arr, arr+10, mycomp); //由大到小排序
for(int i = 0; i < 10; i++)//輸出排序好的排序
std::cout << arr[i] << ' ';
return 0;
}
int arr[10] = {3, 5, 2, 7, 1, 4, 6, 8, 9, 0};
void merge_sort(int a[], int be, int en){
if(be + 1 >= en)
return;
int mid = (be + en) / 2;
merge_sort(a, be, mid);
merge_sort(a, mid, en);
int wait[en-be], j = mid, k = 0;
for(int i = be; i < mid; i++){
while(j < en && a[j] < a[i]){
wait[k++] = a[j++];
}
wait[k++] = a[i];
}
for(k = be; k < j; k++){
a[k] = wait[k-be];
}
return;
}
想找
找到了!
#include <iostream>
int arr[10] = {4, 5, 7, 13, 23, 27, 30, 31, 36, 38};
int bi_search(int a){
int s = 0, e = 9, i;
do{
i = (e + s) / 2;
if(arr[i] == a){
return i;
}else if(arr[i] > a)
e = i;
else
s = i;
}while(e - s > 0);
}
int main(){
std::cout << "find it at " << bi_search(36) << ".\n";
return 0;
}
遞迴版的當加分題~
#include <algorithm>
#include <iostream>
int arr[10] = {4, 5, 7, 13, 23, 27, 30, 31, 36, 38};
int main(){
if(std::binary_search(arr, arr+10, 36)){
std::cout << "Found it.\n";
}
return 0;
}
#include <algorithm>
⋮
std::binary_search(迭代器的頭, 迭代器的尾, 要搜尋的值, 排序規則(選填));