Manchester


私信TA

用户名:wenyajie

访问量:312327

签 名:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

等  级
排  名 1
经  验 62665
参赛次数 1
文章发表 188
年  龄 0
在职情况 学生
学  校 Xiamen University
专  业 计算机科学

  自我简介:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

解题思路:

①:从第一个数开始,每一个数依次与它后面一个数比较,比它后面的大,则交换

②:n个数,排序n-1趟(当序列逆序的时候)

③:若在一趟遍历中没有发生交换,即序列有序,则直接跳出循环,后面的趟数不再进行

④:如

1):序列:5  4  3  2  1 

2):第一趟排序结果为:4  3  2  1  5

3):第二趟排序结果为:3  2  1  4  5

4):第三趟排序结果为:2  1  3  4  5

5):第四趟排序结果为:1  2  3  4  5


知识补充:

1):冒泡排序的每一趟排序,元素都能到达最终位置

2):其排序趟数与初始序列的排列顺序有关

3):比较次数也与初始序列排列顺序有关

3):冒泡排序是一个稳定排序

4):最坏时间复杂度为o(n^2),最好为o(n)


参考代码:

#include<stdio.h>
#include<malloc.h>
void maoSort(int R[],int n);
void print_(int R[],int n);

int main()
{

    int n=4;/*序列长度为4*/
    /*为数组开辟空间*/
    int *R=(int *)malloc(n*sizeof(int));

     while(scanf("%d",&R[0])!=EOF)
     {
         /*输入数据*/
         for(int i=1;i<n;i++)
            scanf("%d",&R[i]);
            /*用冒泡排序*/
         maoSort(R,n);
         /*输出排序结果*/
         print_(R,n);
         free(R);
     }
     return 0;
}
/*==================================================*/
void maoSort(int R[],int n)
{
    int p=0;/*用于一次遍历中是否发生交换*/
    int term;
    for(int i=0;i<n-1;i++)
        {
            p=0;
            for(int j=0;j<n-i-1;j++)
            {
                if(R[j]>R[j+1])
                {
                    /*进行交换*/
                    term=R[j];
                    R[j]=R[j+1];
                    R[j+1]=term;
                    /*交换标志置1*/
                    p=1;
                }
            }
            /*如果没发生交换,说明序列有序,直接跳出循环*/
            if(p==0)
                break;
        }
}
/*==================================================*/
void print_(int R[],int n)
{
    for(int i=0;i<n-1;i++)
        printf("%d ",R[i]);
    printf("%d\n",R[n-1]);
}

别忘点赞哦-.-

 

0.0分

58 人评分

  评论区

#include<stdio.h>
void swap(int &a,int &b){
    int tmp;
    tmp = a;
    a = b;
    b = tmp;
}
int main()
{
    int arr[4] = {0};
    for( int i = 0; i < 4 ; i++ ){
        scanf("%d",&arr[i]);
    }
    for (int i = 0; i < 4; i++) {
        for (int j = 1; j < 4; j++) {
            if(arr[j]<arr[j-1]){
                swap(arr[j],arr[j-1]);
            }
        }
    }

    for (int i = 0; i < 4; i++) {
        printf("%2d",arr[i]);
    }
    return 0;
}
为什么我这个是错的!!测试用例没毛病啊
2022-12-14 23:47:08
直接用sort不香吗?
2022-06-13 14:23:13
#include<stdio.h>
int main()
{ 
int a[4];
int i,j,t;
	for(i=0;i<4;i++);
	{
		scanf("%d",&a[i]);
	
	}
for(i=0;i<4;i++)
{
	printf("%d\n",a[i]);
	
	
}
	for(i=0;i<3;i++)
	{
		for(j=0;j<3-i;j++)
		{
			if(a[j]>a[j+1])
			{
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
		
			
		}
	}
for(i=0;i<4;i++)
{
	printf("%d ",a[i]);
	
	
}
	return 0;
}
这个为什么输出都是错的啊!
2022-02-25 20:09:59
牛啊
2021-11-11 21:09:55
#include<stdio.h>
int main(void){
	int a[4],n,m,t;
	printf("input something:\n");
	for(n=0;n<4;n++){
		scanf("%d",&a[n]);
		}
	for(n=0;n<4;n++){
		for(m=n+1;m<4;m++){
			if(a[n]>a[m]){
				t=a[n];
				a[n]=a[m];
				a[m]=t;
				}			
			} 
		printf("%d  ",a[n]);
		}	
	return 0;
}
2021-07-27 16:08:36
#include<stdio.h>
#define N 4
int main()
{
    int i,j,k,temp;
    int line[N];
    for(i=0;i<N;i++)
    {
        scanf("%d",&line[i]);
    }
    for(i=0;i<N-1;i++)
    {
        k = i;
        for(j=i+1;j<N;j++)
        {
            if(line[j]<line[k])
            {
                k = j;
            }
        }
        if(k!=i)
        {
            temp = line[k];
            line[k]=line[i];
            line[i]=temp;
        }

    }
    for(i=0;i<N;i++)
        printf("%d ",line[i]);
    return 0;
}
2020-09-16 14:37:21
#include<stdio.h>
int main()
{
	int a[4],i,j,t;
	for(i=0;i<4;i++)
	scanf("%d",&a[i]);
	for(i=0;i<4;i++)
		for(j=0;j<3-i;j++)
		{
			if(a[j]>a[j+1])
			{
			t=a[j];
			a[j]=a[j+1];
			a[j+1]=t;
			}
			else if(a[j]<a[j+1])
			a[j]=a[j];
		}
	for(i=0;i<4;i++)
	printf("%d ",a[i]);
	printf("\n");
	return 0;
}
2019-03-02 12:33:43
malloc要free。
2018-12-29 09:17:53
  • «
  • 1
  • »