C语言,这个程序的降序是怎么实现的,具体说明一下吗?

int a[]={4,0,2,3,1},i,j,t;
for(i=1;i<5;i++)
{
t=a[i];j=i-1;
while(j>=0&&t>a[j])
{
a[j+1]=a[j];
j--;
}
a[j+1]=t;
}

第1个回答  2012-04-15
是这样的:
首先将a[1]的值赋给t,j=i-1是为了从i的下一个数开始比较。
t>a[j]时退出意思是当t的值比较到发现还有比他小的数的时候就退出。
然后将这个数赋值给t。再次循环……
以下是样例的运算过程:
1、4 0 2 3 1 t=4
2、4 0 2 3 1 t=0
3、0 4 2 3 1 t=2
4、0 2 4 3 1 t=3
5、0 2 3 4 1 t=4
6、0 1 2 3 4 t=1
第2个回答  2012-04-15
感觉像是插入排序法的变形算法,基本思想是先把第一个数当成有序的,然后把第二个数按照顺序插入到这个序列中,然后前两个数就变成有序的了,这时候再把第三个数按照顺序插入到前面的序列中,以此类推,直到把最后一个数按顺序插入到前面的有序序列中。
比如本例,外层循环控制变量i的取值分别为1,2,3,4,分别控制数组元素0,2,3,1的插入操作。
t=a[i];句则将待插入数据暂时存储在临时变量t中。
内层循环有两个循环条件,其实就是将待插入数从前面有序序列的最后开始比较,如果是逆序,则元素向后移动一位,直到不再逆序或到了序列首位,此时j的值定位到待插入数应该存入位置的前面,退出循环后将待插入数放入序列即可。具体过程如下
外层循环i=1时
[4] 0 2 3 1
0为待插入数,判断0>4是否成立,不成立,退出循环,j值为0,插入位置应该为j+1的位置。变成
[4 0] 2 3 1
进入外层第二次循环,i=2
2为待插入数,2和0比,是逆序,所以将0后移一位,变成
[4 0] 0 3 1
然后再将2和4比较,发现不是逆序,退出循环,此时j=0
2应该插入的位置应该是j+1的位置,变成
[4 2 0] 3 1
以此类推,直到最后一次外循环将1插入完毕排序结束。本回答被提问者采纳

关于C语言进行降序排列
\/\/从键盘上输入10个整数,要求用插入法实现对它们进行降序排列。\/\/(主函数完成输入输出功能,排序用函数sort()来实现)。void sort(int a[],int n){ int i,j,temp;for(i=0;i<n-1;i++){ temp=a[i+1];j=i;while(j>-1&&temp<a[j]){ a[j+1]=a[j];j--;} a[j+1]=temp;}...

用计算机C语言编程,程序设计题:从键盘输入十个数,将他们进行降序排列...
include<stdio.h>int main(){int i,j,t,a[10]; for(i=0;i<10;i++) \/\/输入10个整数 scanf("%d",&a[i]); for(i=0;i<9;i++) \/\/降序冒泡排序 for(j=0;j<9-i;j++) if(a[j]<a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;} for(i=0;...

c语言中用三个数降序排列
void main(){ int i,j,k,t;scanf("%d %d %d",&i,&j,&k);if(i<j){ t=i;i=j;j=t;} if(i<k){ t=i;i=k;k=t;} if(j<k){ t=j;j=k;k=t;} printf("%d %d %d",i,j,k);}

C语言数组七个数升序排列和降序排列怎么编程?
1、打开visual C++ 6.0-文件-新建-文件-C++ Source File。2、定义数组和变量:#include<stdio.h>main(){char a[100], b[100], c[200], *p;int i = 0, j = 0, k = 0;。3、输入字符串: printf("please input string a:\\n");scanf("%s", a); \/*输入字符串1放入a数组...

用C语言编写一函数,函数实现以下数字的排序[升序和降序]
降序:include "stdio.h"main(){ int a[4]={1,4,2,6};int i,j,num;for (i=1;i<4;i++){ for (j=0;j<4-i;j++){if (a[j]<a[j+1]){num=a[j];a[j]=a[j+1];a[j+1]=num;} } } for (i=0;i<4;i++)printf (" %d ",a[i]);} 升序和降序的区别只是IF...

C语言的升序和降序
int a[5]={};int i,j;int temp=0;for(i=0;i<5;i++){ printf("请输入第%d个整数\\n",i+1);scanf("%d",&a[i]);} for(i=1;i<5;i++){ for(j=0;j<5-i;j++){ if(a[j]<a[j+1])...\/\/把大于号改成小于号 { temp=a[j];a[j]=a[j+1];a[j+1]=temp;} ...

c语言数组的排序
include <stdio.h>#include #define elemType int \/*元素类型*\/#define LEN 100 \/*数组长度上限*\/#define ASC 0 \/*升序*\/#define DESC 1 \/*降序*\/\/*冒泡排序*\/\/*参数说明:*\/\/*elemType arr[]:排序目标数组*\/\/*int len:元素个数*\/\/*int order:排序方式;升序(由小到大):ASC;降...

从键盘输入5个整数,按照其值从大到小排序 C语言做,小白式
C语言实现5个整数的降序排序,参考代码如下:include <stdio.h>#define N 5void BubbleSort(int a[], int n) {int i,j,t;for(i=0;i<n-1;++i)for(j=0;j<n-i-1;++j) if(a[j]<a[j+1]){ t=a[j]; a[j]=a[j+1]; a[j+1]=t; }}int main(){int ...

用c语言编写程序,比较三个数值的大小,以降序输出
\/ 输入三个整数(空格隔开) : 12 45 32 45 32 12 \/ include <stdio.h> void Exchange(int *a,int *b) { int t = *a;a = *b;b = t;} int main() { int a,b,c;printf("输入三个整数(空格隔开) : ");scanf("%d%d%d",&a,&b,&c);if(a < b) Exchange(&a,&b); \/...

C语言,程序设计 输入4个整数,要求按由小到大的顺序输出 怎么做啊...
这样一轮过后,最大的数将会出现称为最末位的数组元素。第二轮则去掉最后一个数,对前n-1个数再按照上面的步骤找出最大数,该数将称为倒数第二的数组元素...n-1轮过后,就完成了排序。\/\/若要以降序顺序排列,则只需将 if(array[j]>array[j+1])语句中的大于号改为小于号即可。\/\/程序如下...

相似回答