使用减治思想实现插入排序以及折半查找,自定义无向图,使用深度优先查找遍历所定义无向图中的所有顶点,用c语言
时间: 2024-10-13 10:07:12 浏览: 38
在C语言中,我们可以分别使用不同的算法来实现这些功能:
1. **插入排序** (减治思想):
插入排序通过比较元素并将其插入已排序的部分,其基本思想是从未排序的序列中取出一个元素,在已排序部分找到它应该的位置。这里是一个简单的C语言版本:
```c
void insertion_sort(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;
}
}
```
2. **折半查找** (二分查找):
折半查找通常用于有序数组中,每次将搜索范围减半。以下是C语言实现:
```c
int binary_search(int arr[], int l, int r, int x) {
if (r >= l) {
int mid = l + (r - l) / 2;
if (arr[mid] == x)
return mid;
else if (arr[mid] > x)
return binary_search(arr, l, mid - 1, x);
else
return binary_search(arr, mid + 1, r, x);
}
return -1;
}
```
3. **无向图的定义及深度优先遍历**:
C语言中可以使用邻接表来表示无向图。以下是无向图的简单定义以及深度优先遍历的函数:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
// 初始化图
void create_graph(Node** adj, int V, ...) {
// ... 用V个节点创建邻接表
}
// 深度优先遍历
void dfs(Node* node, bool visited[]) {
visited[node->data] = true;
printf("%d ", node->data);
Node* temp = node->next;
while (temp != NULL) {
if (!visited[temp->data]) {
dfs(temp, visited);
}
temp = temp->next;
}
}
```
阅读全文