当前位置:首页 » 编程语言 » c语言86541逆序排序
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言86541逆序排序

发布时间: 2022-09-10 23:51:29

‘壹’ c语言编程:逆序排列

#include <stdio.h>

int main()
{
int t, n, i = 0, a[20];
while (scanf("%d", &a[i]) != EOF && a[i] != 0) i++;

n = i - 1;
for (i = 0; i <= n / 2; i++)
{
t = a[i];
a[i] = a[n - i];
a[n - i] = t;
}

for (i = 0; i < n; i++)
printf("%d ", a[i]);
printf("%d\n", a[i]);
return 0 ;

‘贰’ C语言关于逆向排序

重要的是思想,不是代码.
原来:1
2
3
4
5
第一:5
2
3
4
1
//
第一个和最后一个交换
第二:5
4
3
2
1
//
第二个和倒数第二个交换
上面2次就交换完毕,
因为交换1次,
是2个数据的位置变动了,
奇数的时候中间的数不用动.
所以是
n/2.
若继续交换

反反得正,又换回来了...

‘叁’ 用C语言编程:将一个数组逆序输出

1、首先打开软件VC++6.0软件,准备一个空白的C语言文件,引入头文件并写好主函数:

‘肆’ c语言编程,将一个数组中的值按逆序排列。望解答。谢谢。

#include"stdio.h"
intmain(intargc,char*argv[]){
inta[10]={1,2,3,4,5,6,7,8,9,0},i,j,k;
for(i=0,j=9;i<j;j--,i++)
k=a[i],a[i]=a[j],a[j]=k;
for(i=0;i<10;printf("%d",a[i++]));
printf(" ");
return0;
}

运行结果:

‘伍’ 用C语言怎样写下面的程序 1:将一个数组中的值按逆顺序存放如愿来的顺序为86541要求改为14568

void swith(int arr[],int num)
{ int j,k;
for(j=0;j<num;j++,num--)//循环,交换值
{ k=arr[num-1];
arr[num-1]=arr[j];
arr[j]=k;
}
}
void main()
{int a[5]={8,6,5,4,1};
int b[10];
int i=0;
for(i=0;i<10,i++)
scanf("%d",a[i]);//自已定义数组的值,个数为10;
swith(a,5);//调用
swith(b,10);//调用
for(i=0;i<5;i++)
printf("%d\t",a[i]);//输出
printf("\n");
for(i=0;i<10;i++)
printf("%d\t",b[i]);//输出
printf("\n");
}

‘陆’ C语言 选择法排逆序 问题

因为每次排序开始的时候,你没有给pm赋初值,那么前一次比较中,pm指向哪里,后来还会指向哪里,而且你的程序每次一定会发生交换,那如果第二次本来顺序是对的,交换之后就会把顺序打乱。看图,就是刚刚讲的过程。
解决办法:
1.每次给pm赋个初值,就指向当前的a[i]
2.给交换的那部分函数加一个判断条件,比如
if pm!=&a[i],再开始交换。

‘柒’ C语言数组元素逆序排列怎么做

首先阐述一下逆序对的概念。假设有一个数组为Array[0..n] 其中有元素a[i],a[j].如果 当i<j时,a[i]>a[j],那么我们就称(a[i],a[j])为一个逆序对。
那么统计一个数组中的逆序对,有什么作用呢。逆序对可以反映插入排序的效率问题,如果逆序对数量多,那么插入排序的效率就低,反之亦然。

那么如何快速的找到逆序对的数量,同时又能够对数组进行排序,并且使得复杂度为O(n*logn)呢?这就可能是一个小问题

看到复杂度为n*logn 有一种亲切感,应为我们可以知道归并排序的时间复杂度为O(n*logn)。 同时归并排序是通过递归的方法建立递归树,利用最小的两个元素进行对比然后逐层向上进行递归,然后对比两个已经排好序的数组,得到最终完整的排好序的数组。

归并排序分为了3步骤;

第一步 拆分

第二步进行 计算两个同样类型但是规模较小的数组

第三步 合并两个已排好序的数组

因此从整个数组拆分过程中,我们将它不断进行拆分,而拆分得到的两个数组,又是和原数组目的和形式相同的(即都是要排序,同时如果不为最小还要进行以上3步)

这样可以想到递归解决问题,每一层进行相同的3步,知道不能进行位置。那么这个不能进行的判断显得格外重要。

那么加入了逆序对后,如何考虑呢,实际上很简单。以为从最下面的含两个元素的数组,到上层含多个元素的数组都有前后之分,这正好与逆序对性质相符,只要我
们找出前面那一个数组中假设L[i] 大于 后面一个数组中某个元素R[j]
然后就知道前面那个数组在该元素L[i]之后的元素都应该是大于R[j]的。因为在归并过程我们也进行了排序。

大概思路就是这样,以下是代码。

[cpp] view plain
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#define Infinite_num 1000
int L[100];
int R[100];

int merge_sort(int Array[],int p,int q,int r)
{
int n1 = q-p+1;
int n2 = r-q;
for(int i=0;i<n1;i++)
{
L[i] = Array[p+i];
}
L[n1] = Infinite_num;
for(i=0;i<n2;i++)
{
R[i] = Array[q+i+1];
}
R[n2] = Infinite_num;
int inversions = 0;
int count = false;
int j=0;
i=0;
for(int k=p;k<=r;k++)
{
if(count==false &&(L[i]>R[j])&&(R[i]!=Infinite_num))
{
inversions = inversions+n1-i;
count = true;
}
if(L[i]<=R[j])
{
Array[k] = L[i];
i++;
}
else
{
Array[k] = R[j];
j++;
count = false;
}
}
return inversions;

}
int merge_inverse(int Array[],int p,int r)
{
int inversions = 0;
int q = -1;
if(p < r)
{
q = (p+r)/2;
inversions = inversions+merge_inverse(Array,p,q);
inversions = inversions+merge_inverse(Array,q+1,r);
inversions = inversions+merge_sort(Array,p,q,r);
}
return inversions;
}
int main(int argc, char* argv[])
{
int Array[] = {1,3,7,8,2,4,6,5};

int inverse_times = 0;

inverse_times = merge_inverse(Array,0,7);
printf("%d",inverse_times);
return 0;
}

‘捌’ c语言程序设计 倒序排序的程序

#include<stdio.h>

intmain()
{

intarr[10];//定义十个元素的数组

for(inti=0;i<10;i++)
scanf("%d",&arr[i]);//循环给元素赋值

for(inti1=0;i1<10;i1++)
{
for(inti2=0;i2<10-i1-1;i2++)
{
if(arr[i2]<arr[i2+1])
{
inttemp=arr[i2];
arr[i2]=arr[i2+1];
arr[i2+1]=temp;

}
}
}


for(intj=0;j<10;j++)
printf("%d ",arr[j]);//输出
return0;
}

‘玖’ 用C语言编程将一个数组的元素值按逆序重新排放。

#include <stdio.h>
#define N 10
void main()
{
int a[N],i,temp;
printf("请输入%d个整数:\n",N);
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("输入的数字是:\n");
for(i=0;i<N;i++)
printf("%3d",a[i]);
printf("\n");
for(i=0;i<N/2;i++)
{
temp=a[i];
a[i]=a[N-1-i];
a[N-1-i]=temp;
}
printf("重新排序后的数组是:\n");
for(i=0;i<N;i++)
printf("%3d",a[i]);
printf("\n");
}

‘拾’ 如何用C语言实现字符串逆序排列

楼主你好
具体代码如下:
#include<stdio.h>
#include<string.h>
int
main()
{
char
*p;
char
c[20];
printf("Enter
a
string:");
scanf("%s",c);
p=c+strlen(c)-1;
while(p>=c)
printf("%c",*(p--));
printf("\n");
}
希望能帮助你哈