c语言将一组数字字符串转换为整数后排序。
时间: 2024-05-13 20:17:51 浏览: 15
可以使用C语言中的stdlib库中的qsort函数来对字符串数组进行排序。但是在排序前,需要将每个字符串转换为整数,可以使用C语言中的atoi函数来实现。
下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 比较函数,用于qsort排序
int cmp(const void* a, const void* b) {
return *(int*)a - *(int*)b;
}
int main() {
// 定义字符串数组
char strArr[10][10] = {"23", "67", "12", "89", "34", "56", "78", "90", "45", "01"};
// 将每个字符串转换为整数
int intArr[10];
for (int i = 0; i < 10; i++) {
intArr[i] = atoi(strArr[i]);
}
// 排序
qsort(intArr, 10, sizeof(int), cmp);
// 输出结果
for (int i = 0; i < 10; i++) {
printf("%d ", intArr[i]);
}
printf("\n");
return 0;
}
```
输出结果为: 1 12 23 34 45 56 67 78 89 90
相关问题
用C语言编写函数,将一个字符串中的字符进行降序排序,并将排序后的字符串转换成整数数组。在main函数中验证。要求:字符串在main函数中由键盘输入
好的,我可以帮您编写这个函数。下面是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void str_sort(char* str, int* arr, int n)
{
int i, j, temp;
for (i = 0; i < n; i++) {
arr[i] = str[i] - '0'; // 将字符转换成整数
}
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (arr[j] < arr[j + 1]) { // 降序排序
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main()
{
char str[100];
int arr[100];
int n, i;
printf("请输入字符串:\n");
scanf("%s", str);
n = strlen(str);
str_sort(str, arr, n); // 调用排序函数
printf("排序后的整数数组为:\n");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
在这个函数中,我们先将输入的字符串按照字符转换成整数数组,然后使用冒泡排序对整数数组进行降序排序。最后在主函数中输出排序后的整数数组。
希望这个函数能够满足您的需求。
用基数排序算法,对-100000000~100000000以内的整数进行升序排序,输入一组整数,数字之间以空格隔开,排序后的数字之间以空格隔开输出结果,C语言实现
好的,我来为您解答。
基数排序是一种非比较排序算法,其核心思想是按照数字的位数进行排序,从低位到高位进行排序。对于本题,我们可以先将所有的数字转换成字符串,然后按照字符串的长度进行排序,再按照每一位的大小进行排序。
以下是C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_DIGITS 10
void radix_sort(int arr[], int n) {
char str[n][MAX_DIGITS+1];
int i, j, k, max_len = 0, digit, count[10], bucket[n][10];
// 将所有数字转换成字符串,并求出最大位数
for (i = 0; i < n; i++) {
sprintf(str[i], "%d", arr[i]);
if (strlen(str[i]) > max_len) {
max_len = strlen(str[i]);
}
}
// 按照字符串长度进行排序
for (k = max_len-1; k >= 0; k--) {
memset(count, 0, sizeof(count));
for (i = 0; i < n; i++) {
digit = k < strlen(str[i]) ? str[i][k]-'0' : 0;
bucket[count[digit]][digit] = arr[i];
count[digit]++;
}
j = 0;
for (i = 0; i < 10; i++) {
for (digit = 0; digit < count[i]; digit++) {
arr[j] = bucket[digit][i];
j++;
}
}
}
}
int main() {
int n, i;
scanf("%d", &n);
int arr[n];
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
radix_sort(arr, n);
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
我们先将所有的数字转换成字符串,并求出最大位数,然后按照字符串长度进行排序,接着按照每一位的大小进行排序,最终得到升序排列的结果。
需要注意的是,该算法的时间复杂度为O(d(n+k)),其中d为最大位数,k为基数,因此对于本题的数据范围-100000000~100000000,最大位数为9,基数为10,时间复杂度为O(180n),可以通过本题。