Text
void bubbleSort(int a[], int n)
{
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
if (a[i] > a[j])
swap(a[i], a[j])
}
}
}先從左到右兩兩比對跑一次, 此時最小的就會在左邊,以此類推跑n次後,前i小的就會在第i次排序好
每次插入一個新數字,如果當前的值比新數字大,將所有值往後移一格,再把空出的格子填入新數字
void insertionSort(int arr[], int n)
{
for (int i = 1; i < n; i++)
{
int key = arr[i]; // 要插入的值
int j = i - 1;
while (j >= 0 && arr[j] > key)
{
arr[j + 1] = arr[j]; // 往後移
j--;
}
arr[j + 1] = key; // 插入正確位置
}
}vector 比較好用的陣列
vector<int> vec; // 宣告陣列
vec.push_back(1); //輸入參數
vec.pop_back(); // 刪除末端內容
vec.size(); //輸出vector的大小
vec.begin(); // 陣列開始的"記憶體位置"
sort(vec.begin(), vec.begin + n); //排序前n個
sort(vec.begin(), vec.end()); //從頭排序到尾指標是一種變數,用來存放記憶體位址
int a; // 一個普通的整數變數
int *ptr = &a; // ptr是指標,&a代表取得a的記憶體位址既然可以存放記憶體,那也可以配置一塊記憶體
int *p = new int; // 新配置的一塊記憶體
*p = 42;
cout << *p << endl; // 輸出42
delete p; //既然是新配置的,那麼也要記得刪除
int *arr = new int [10]; //配置新的陣列所需的記憶體
delete[] arr; //清除陣列記憶體new 的記憶體是從哪裡拿的?
我如果忘記delete會怎麼樣?
用動態配置的記憶體不會自動釋放,所以他會一直佔據空間
造成Memory leak(記憶體外洩)
指標和參考變數雖然觀念題不考,實作也不一定會用到,但是很重要的觀念!
跟原本一模一樣的變數,改動此變數的時候,原本的變數的值也會跟著改動。
int a; // 一個普通的整數變數
int &cpa = a; // cpa是a的參考變數為甚麼會需要指標和參考變數?
* 變數的作用域
* 方便記錄的另一種方法
將陣列不停切半,確保左邊的排序好,右邊的也排序好,最後將兩個陣列合併
void MergeSort(vector<int> &arr, int start, int end)
{
int mid = (start + end) / 2;
if(start == end)
return;
MergeSort(arr, start, mid);
MergeSort(arr, mid + 1, end);
Merge();
}啊關鍵的Merge怎麼寫?
先自己想想看!下次公布
void MergeSort(int &arr[], int start, int end)
{
int mid = (start + end) / 2;
MergeSort(arr[], start, mid);
MergeSort(arr[], mid + 1, end);
Merge();
}在數列中任意挑選一個數,稱為pivot
然後調整數列,
使得「所有在pivot左邊的數,都比pivot還小」
而「在pivot右邊的數都比pivot大」。
接著,將所有在pivot左邊的數視為「新的數列」
所有在pivot右邊的數視為「另一個新的數列」
rand/srand可以用來產生隨機數
但要注意,電腦生成的隨機數並不是完全隨機,而是通過複雜的演算法讓亂數種子對應出相對的亂數
#include <cstdlib>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int x;
srand(x); // 設定亂數種子
cout << rand(); // 隨機產生的數字
}通常上面的隨機可以再搭配time函數達成製造每次都不一樣的結果
#include <ctime>
#include <cstdlib>
#include <bits/stdc++.h>
using namespace std;
int main()
{
time_t start = time(0); // 「從1970年1月1日0時0分0秒」到「現在」的時間差,單位為秒。
srand( time(NULL) );
/* 產生亂數 */
int x = rand();
}