C语言基于高精度存储结构写选择排序
时间: 2023-06-16 12:08:31 浏览: 40
以下是基于高精度存储结构的选择排序的 C 语言代码实现:
```c
#include <stdio.h>
#include <string.h>
// 高精度整数结构体
typedef struct {
int num[1000]; // 数组存储每位数字
int len; // 整数长度
} BigInt;
// 初始化高精度整数
void init(BigInt *a) {
memset(a->num, 0, sizeof(a->num));
a->len = 0;
}
// 高精度整数赋值
void assign(BigInt *a, char *s) {
int i, j;
init(a);
a->len = strlen(s);
for (i = 0, j = a->len - 1; i < a->len; i++, j--) {
a->num[i] = s[j] - '0';
}
}
// 高精度整数比较大小
int cmp(BigInt a, BigInt b) {
int i;
if (a.len != b.len) {
return a.len - b.len;
}
for (i = a.len - 1; i >= 0; i--) {
if (a.num[i] != b.num[i]) {
return a.num[i] - b.num[i];
}
}
return 0;
}
// 高精度整数交换
void swap(BigInt *a, BigInt *b) {
BigInt tmp;
memcpy(&tmp, a, sizeof(BigInt));
memcpy(a, b, sizeof(BigInt));
memcpy(b, &tmp, sizeof(BigInt));
}
// 高精度整数选择排序
void selectionSort(BigInt arr[], int n) {
int i, j, min_idx;
for (i = 0; i < n - 1; i++) {
min_idx = i;
for (j = i + 1; j < n; j++) {
if (cmp(arr[j], arr[min_idx]) < 0) {
min_idx = j;
}
}
if (min_idx != i) {
swap(&arr[i], &arr[min_idx]);
}
}
}
// 打印高精度整数
void printBigInt(BigInt a) {
int i;
for (i = a.len - 1; i >= 0; i--) {
printf("%d", a.num[i]);
}
printf("\n");
}
int main() {
int n, i;
char s[1000];
BigInt arr[1000];
printf("输入整数个数:");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("输入第 %d 个整数:", i + 1);
scanf("%s", s);
assign(&arr[i], s);
}
selectionSort(arr, n);
printf("排序结果:\n");
for (i = 0; i < n; i++) {
printf("%d: ", i + 1);
printBigInt(arr[i]);
}
return 0;
}
```
在以上代码中,使用了一个 `BigInt` 结构体来存储高精度整数。该结构体包含一个 `num` 数组来存储每位数字,以及一个 `len` 变量来存储整数的长度。在初始化、赋值、比较大小、交换、打印高精度整数等操作时,都需要对 `num` 数组和 `len` 变量进行相应的处理。
选择排序的实现与普通的选择排序类似,只需要根据比较函数 `cmp` 来比较两个高精度整数的大小,并在交换时调用 `swap` 函数即可。