输入整数m,根据m的大小动态分配m个连续的单元(即动态数组),然后输入m个整数,最后升序输出。
输入示例:
5
8 2 5 6 3
输出示例:
2 3 5 6 8
#include <stdio.h>
void sort(int sz[],int number){
int i, j, temp;
for (i = 0; i < number-1; i++) {
for (j = 0; j < number-i-1; j++) {
if (sz[j] > sz[j+1]) {
temp = sz[j];
sz[j] = sz[j+1];
sz[j+1] = temp;
}
}
}
}
int main() {
int number, n;
printf("请输入数字:");
scanf("%d", &number);
int sz[number];
printf("请输入number个数字:");
//输入
for(n=0;n<number;n++){
scanf("%d", &sz[n]);
}
//排序
sort(sz,number);
//输出
for(n=0;n<number;n++)
printf("%d ", sz[n]);
return 0;
}
动态数组
scanf("%d",&n);
int *arr=(int*)malloc(n*sizeof(int));
for(i=0;i<n;i++)
scanf("%d",&arr[i]);
供参考:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m, * a, i, j, t;
scanf("%d", &m);
a = (int*)malloc(sizeof(int) * m);
for (i = 0; i < m; i++)
scanf("%d", &a[i]);
for (i = m - 1; i > 0; i--)
for (j = 0; j < i; j++)
if (a[j] > a[j + 1])
{
t = a[j]; a[j] = a[j + 1]; a[j + 1] = t;
}
for (i = 0; i < m; i++)
printf(i ? " %d" : "%d", a[i]);
free(a);
return 0;
}
#include<stdio.h>
#include<malloc.h>
int main()
{
int a, i,j,r;
int *p, b;
printf("请输入一个整数:");
scanf("%d", &a);
p = (int*) malloc( a*sizeof(int) );
printf("请输入以上整数个数:");
for ( i = 0; i < a; i++ )
{
scanf("%d", p+i);
}
for(j=a-1; j>0; j--)
{
for(r=0; r<j; r++)
{
if(*(p+r)>*(p+r+1))
{
b = *(p+r);
*(p+r) = *(p+r+1);
*(p+r+1) = b;
}
}
}
for ( i = 0; i < a; i++ )
{
printf("%d", *(p+i));
}
free(p);
return 0;
}
【以下回答由 GPT 生成】
首先,我们可以使用链表来实现动态数组的创建和存储。链表是由节点组成的数据结构,每个节点包含一个数据元素和指向下一个节点的指针。我们可以使用struct
结构体来定义链表节点的数据结构。
下面是一个示例代码,用于创建链表并存储输入的整数:
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
int main() {
int m, i;
printf("请输入整数m的大小:");
scanf("%d", &m);
// 创建头节点
struct Node* head = NULL;
head = (struct Node*)malloc(sizeof(struct Node));
head->next = NULL;
// 根据m的大小动态分配m个连续的单元,并输入m个整数
printf("请输入%d个整数:", m);
struct Node* current = head;
for (i = 0; i < m; i++) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
scanf("%d", &(newNode->data));
newNode->next = NULL;
current->next = newNode;
current = current->next;
}
// 输出链表的数据元素
current = head->next;
printf("输出链表的数据元素:");
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
// 释放链表的内存空间
current = head;
while (current != NULL) {
struct Node* temp = current;
current = current->next;
free(temp);
}
return 0;
}
以上示例代码先提示用户输入整数m的大小,然后动态创建一个链表,并存储m个整数。最后输出链表中的数据元素。
接下来,我们可以使用链表来实现对数组的排序。常用的排序算法之一是冒泡排序。冒泡排序的基本思想是从左到右依次比较相邻的两个元素,如果逆序则交换它们的位置,直到整个数组排序完成。
下面是一个示例代码,用于在链表中实现冒泡排序:
// 冒泡排序
void bubbleSort(struct Node* head) {
int swapped;
struct Node* ptr1;
struct Node* lptr = NULL;
/* 如果链表为空,则直接返回 */
if (head == NULL)
return;
do {
swapped = 0;
ptr1 = head->next;
while (ptr1->next != lptr) {
if (ptr1->data > ptr1->next->data) {
int temp = ptr1->data;
ptr1->data = ptr1->next->data;
ptr1->next->data = temp;
swapped = 1;
}
ptr1 = ptr1->next;
}
lptr = ptr1;
} while (swapped);
}
以上示例代码定义了一个bubbleSort
函数,接受一个链表头节点作为参数,在链表中实现冒泡排序。在主函数中,我们可以调用该函数来对输入的整数进行排序。
下面是完整的示例代码:
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
// 冒泡排序
void bubbleSort(struct Node* head) {
int swapped;
struct Node* ptr1;
struct Node* lptr = NULL;
/* 如果链表为空,则直接返回 */
if (head == NULL)
return;
do {
swapped = 0;
ptr1 = head->next;
while (ptr1->next != lptr) {
if (ptr1->data > ptr1->next->data) {
int temp = ptr1->data;
ptr1->data = ptr1->next->data;
ptr1->next->data = temp;
swapped = 1;
}
ptr1 = ptr1->next;
}
lptr = ptr1;
} while (swapped);
}
int main() {
int m, i;
printf("请输入整数m的大小:");
scanf("%d", &m);
// 创建头节点
struct Node* head = NULL;
head = (struct Node*)malloc(sizeof(struct Node));
head->next = NULL;
// 根据m的大小动态分配m个连续的单元,并输入m个整数
printf("请输入%d个整数:", m);
struct Node* current = head;
for (i = 0; i < m; i++) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
scanf("%d", &(newNode->data));
newNode->next = NULL;
current->next = newNode;
current = current->next;
}
// 对链表进行排序
bubbleSort(head);
// 输出链表的数据元素
current = head->next;
printf("按升序输出链表的数据元素:");
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
// 释放链表的内存空间
current = head;
while (current != NULL) {
struct Node* temp = current;
current = current->next;
free(temp);
}
return 0;
}
以上示例代码包括创建链表、存储数据以及对数组进行排序的功能。用户首先输入整数m的大小,然后输入m个整数。程序会创建一个链表来存储输入的整数,并使用冒泡排序算法对链表中的数据进行排序。最后,程序会按升序输出链表的数据元素。
希望以上解决方案对你有所帮助!如果还有其他问题,请随时提问。
【相关推荐】