请问这个怎么写啊,不是很理解

编程实现冒泡排序。编写冒泡排序函数,并在该函数中打印每越排序后的结果,编写主函数要求从键盘上输入1个乱序的整数,调用冒泡排序函数对其进行排序,并在主函数中,打印冒泡排序前后的序列结果。

可以在比较与交换位置后,打印一遍数组即可。

代码如下:

参考链接:
https://baike.baidu.com/item/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F/4602306


#include <stdio.h>

// https://baike.baidu.com/item/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F/4602306
// 冒泡排序 
void bubbleSort(int arr[],int len){
    
    for(int i=0;i<len-1;i++){
        
        for(int j=0;j<len-1-i;j++){
            if(arr[j]>arr[j+1]){
                int temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp; 
            }
        }
        
        // 打印每次排序后的结果 
        printf("排序第%d次后的结果为: ",i+1);
        for(int k=0;k<len;k++){
            printf("%d ",arr[k]);
        }
        printf("\n");
        
    }
    
} 

int main(void){
     
    int arr[10] = {10,9,8,7,6,5,4,3,2,1};  // 要排序的数组 
    bubbleSort(arr,10);  // 调用bubbleSort()函数,排序数组arr 
    
    return 0;
    
}

img


#include <stdio.h>

void bubbleSort(int arr[], int n) {
    int i, j, temp;

    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;
            }
        }

        // 打印每趟排序后的结果
        printf("第%d趟排序结果: ", i+1);
        for (j = 0; j < n; j++) {
            printf("%d ", arr[j]);
        }
        printf("\n");
    }
}

int main() {
    int n, i;

    printf("请输入乱序的整数个数: ");
    scanf("%d", &n);

    int arr[n];

    printf("请输入乱序的整数: ");
    for (i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    printf("冒泡排序前的序列结果: ");
    for (i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    bubbleSort(arr, n);

    printf("冒泡排序后的序列结果: ");
    for (i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

【相关推荐】



  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/742504
  • 你也可以参考下这篇文章:从主函数输入十个不等长的字符串,编写函数,对这些串进行排序,在主调函数中输出排好序的串,指针实现。
  • 您还可以看一下 张飞老师的硬件开发与电路设计速成入门到精通视频教程第一部课程中的 分析整流桥电路,电容计算小节, 巩固相关知识点
  • 除此之外, 这篇博客: 双链表各种基本运算的算法中的  在双链表中,由于每个结点既包括一个指向后继结点的指针有包括一个指向前驱结点的指针,当访问一个结点后既可以依次向后访问又可以依次向前访问。与单链表相比,双链表中访问一个结点的前后结点更便捷。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    #include<stdio.h>
    #include<malloc.h>
    typedef int ElemType;
    typedef struct DNode
    {
    	ElemType data;//存放元素值
    	struct DNode *prior;//指向前驱结点
    	struct DNode *next;//指向后继结点
    }DLinkNode;//双链表的结点类型
    void CreateListF(DLinkNode *&L, ElemType a[], int n)//头插法建立双链表
    {
    	DLinkNode *s;
    	L = (DLinkNode*)malloc(sizeof(DLinkNode));
    	L->next = NULL;
    	for (int i = 0; i < n; i++)
    	{
    		s = (DLinkNode*)malloc(sizeof(DLinkNode));
    		s->data = a[i];
    		s->next = L->next;
    		if (L->next!= NULL)
    			L->next->prior = s;
    		L->next = s;
    		s->prior = L;
    	}
    	s = L->next;
    	while (s->next != NULL)
    		s = s->next;
    	s->next = L;
    	L->prior = s;
    }
    void CreateListR(DLinkNode*&L, ElemType a[], int n)//尾插法建立双链表
    {
    	DLinkNode *s, *r;
    	L = (DLinkNode*)malloc(sizeof(DLinkNode));
    	L->next = NULL;
    	r = L;
    	for (int i = 0; i < n; i++)
    	{
    		s = (DLinkNode*)malloc(sizeof(DLinkNode));
    		s->data = a[i];
    		r->next = s;
    		s->prior = r;
    		r = s;
    	}
    	r->next = L;
    	L->prior = r;
    }
    void InitList(DLinkNode*&L)//初始化线性表
    {
    	L = (DLinkNode*)malloc(sizeof(DLinkNode));
    	L->prior = L->next = L;
    
    }
    void DestroyList(DLinkNode *&L)//销毁线性表
    {
    	DLinkNode *pre = L, *p = pre->next;
    	while (p != L)
    	{
    		free(L);
    		pre = p;
    		p = pre->next;
    	}
    	free(pre);
    }
    bool ListEmpty(DLinkNode *L)//判断线性表是否为空
    {
    	return(L->next = NULL);
    }
    int ListLength(DLinkNode *L)//求线性表的长度
    {
    	DLinkNode *p = L;
    	int i = 0;
    	while (p->next != L)
    	{
    		i++;
    		p = p->next;
    	}
    	return i;
    }
    void DispList(DLinkNode *L)//输出线性表
    {
    	DLinkNode *p= L->next;
    	while (p != L)
    	{
    		printf("%c", p->data);
    		p = p->next;
    	}
    	printf("\n");
    }
    bool GetElem(DLinkNode *L, int i, ElemType &e)//求线性表第i个元素值
    {
    	int j = 1;
    	DLinkNode *p = L->next;
    	if (i <= 0 || L->next == L)
    		return false;
    	while (j < i&&p != NULL)
    	{
    		j++;
    		p = p->next;
    	}
    	if (p == NULL)
    		return false;
    	else
    	{
    		e = p->data;
    		return true;
    	}
    }
    int LocateElem(DLinkNode *L, ElemType e)//查找第一个值域为e的元素序号
    {
    	int i = 1;
    	DLinkNode *p = L->next;
    	while (p != NULL && p->data != e)
    	{
    		i++;
    		p = p->next;
    	}
    	if (p == NULL)
    		return false;
    	else
    		return i;
    }
    bool ListInsert(DLinkNode *&L, int i, ElemType e)//插入第i个元素
    {
    	int j = 0;
    	DLinkNode *p = L, *s;
    	if (i < 0)
    		return false;
    	while (j < i - 1 && p != NULL)
    	{
    		j++;
    		p = p->next;
    	}
    	if (p == NULL)
    		return false;
    	else
    	{
    		s = (DLinkNode*)malloc(sizeof(DLinkNode));
    		s->data = e;
    		s->next = p->next;
    		if (p->next != NULL)
    			p->next->prior = s;
    		s->prior = p;
    		p->next = s;
    		return true;
    	}
    }
    bool ListDelete(DLinkNode*&L, int i, ElemType &e)//删除第i个元素
    {
    	int j = 0;
    	DLinkNode *p = L, *q;
    	if (i <= 0)
    		return false;
    	while (j < i - 1 && p != NULL)
    	{
    		j++;
    		p = p->next;
    	}
    	if (p == NULL)
    		return false;
    	else {
    		q = p->next;
    		if (q == NULL)
    			return false;
    		e = q->data;
    		p->next = q->next;
    		if (p->next != NULL)
    			p->next->prior = p;
    		free(q);
    		return true;
    	}
    }
    int main()
    {
    	DLinkNode *h;
    	ElemType e;
    	printf("双链表的基本运算如下:\n");
    	printf(" (1) 初始化双链表h\n");
    	InitList(h);
    	printf(" (2)依次采用尾插法插入a,b,c,d,e元素\n");
    	ListInsert(h, 1, 'a');
    	ListInsert(h, 2, 'b');
    	ListInsert(h, 3, 'c');
    	ListInsert(h, 4, 'd');
    	ListInsert(h, 5, 'e');
    	printf(" (3)输出双链表h:\n");
    	DispList(h);
    	printf(" (4)双链表h长度:%d\n", ListLength(h));
    	printf(" (5)双链表h为%s\n", (ListEmpty(h) ? "空" : "非空"));
    	GetElem(h, 3, e);
    	printf(" (6)双链表h的第3个元素:%c\n", e);
    	printf(" (7)元素a的位置:%d\n", LocateElem(h, 'a'));
    	printf(" (8)在第4个元素位置上插入f元素\n");
    	ListInsert(h, 4, 'f');
    	printf(" (9)输出双链表h:\n");
    	DispList(h);
    	printf(" (10)删除h的第3个元素\n");
    	ListDelete(h, 3, e);
    	printf(" (11)输出双链表h:\n");
    	DispList(h);
    	printf(" (12)释放双链表h\n");
    	DestroyList(h);
    	return 1;
    
    }

    有错请指正!

     

     


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^