T1归并排序
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
void meger_sort(int a[], int l, int r) {
if (l >= r) return;
int mid = (l + r) / 2;
meger_sort(a, l, mid); meger_sort(a, mid + 1, r);
int i = l, j = mid + 1, temp[N], k = 0;
while (i <= mid && j <= r) {
if (a[i] <= a[j]) temp[k ++ ] = a[i ++ ];
else temp[k ++ ] = a[j ++ ];
}
while (i <= mid) temp[k ++ ] = a[i ++ ];
while (j <= r) temp[k ++ ] = a[j ++ ];
for (int i = l, j = 0; j < k; i ++, j ++ )
a[i] = temp[j];
}
int main() {
int n, a[N];
cin >> n;
for (int i = 0; i < n; i ++ ) cin >> a[i];
meger_sort(a, 0, n - 1);
for (int i = 0; i < n; i ++ ) cout << a[i] << ' ';
return 0;
}
T2Dijkstra
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 510, INF = 0x3f3f3f3f;
int dis[N], st[N]; // st遍历状态, 0~未遍历, 1~已遍历
struct MGraph {
int n;
int matrix[N][N];
}g;
void Dijkstra(MGraph g) {
memset(dis, 0x3f, sizeof dis);
dis[1] = 0; // -3
for (int i = 0; i < g.n; i ++ ) {
int t = 0;
for (int j = 1; j <= g.n; j ++ )
if (!st[j] && (!t || dis[t] > dis[j]))
t = j;
st[t] = 1;
for (int j = 1; j <= g.n; j ++ )
dis[j] = min(dis[j], dis[t] + g.matrix[t][j]);
}
}
int main() {
int n, m;
cin >> n >> m;
memset(g.matrix, 0x3f, sizeof g.matrix);
g.n = n;
for (int i = 0; i < m; i ++ ) {
int a, b, c;
cin >> a >> b >> c;
g.matrix[a][b] = min(g.matrix[a][b], c);
}
Dijkstra(g);
if (dis[n] != INF) cout << dis[n] << endl;
else cout << "-1" << endl;
return 0;
}
T3查找
顺序查找
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
struct List {
int length;
int a[N];
}list;
void swap(int &a, int &b) {
int c;
c = a, a = b, b = c;
}
bool query(int x) { // 查找x
for (int i = 0; i < list.length; i ++ )
if (x == list.a[i]) {
if (i != 0) swap(list.a[i], list.a[i - 1]);
return true;
}
return false;
}
int main() {
cin >> list.length;
for (int i = 0; i < 10; i ++ )
cin >> list.a[i];
query(5);
for (int i = 0; i < list.length; i ++ ) cout << list.a[i] << ' ';
return 0;
}
链式查找
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
struct List {
int data;
List *next;
List(int data): data(data), next(NULL) {}
List(): data() {}
};
void swap(int &a, int &b) {
int c;
c = a, a = b, b = c;
}
bool query(List* list, int x) { // 查找值为x
if (!list->next) return false;
List *p = list;
bool flag = false; // 表示查找是否成功
while (p->next) {
if (p->next->data == x) {
if (p != list) swap(p->data, p->next->data);
return true;
}
p = p->next;
}
return false;
}
int main() {
List* list = new List();
List* a = new List(1);
a->next = new List(2);
a->next->next = new List(3);
list->next = a;
query(list, 3);
List *p = a;
while (p) cout << p->data << ' ', p = p->next;
return 0;
}