算法升序
1. 试编写一个算法 将升序的二叉排序树变为降序的二叉排序树
将一棵根为root的升序二叉排序树转为降序二叉排序树,算法思路是:
(1) 如果树root为空,算法结束;
(2) 将root的左子树转为降序二叉排序树,将root的右子树转为降序二叉排序树;
(3) 将root的左右孩子进行交换,即左孩子变为右孩子,右孩子变为左孩子。
 
在c语言下,用二叉链表表示二叉排序树,实现该算法的过程如下:
typedef  char  datatype;
typedef  struct  _node{
    datatype  data;
    _node  *lchild, *rchild;
}TNode, *PNode, BitTree, *PBitTnode, *PSearchTree;
 
void  ChangeDescen(PSearchTree  root)    {//将根为root的升序二叉排序树转换为降序
    PNode  tmp;
    if(root == NULL)    return;
    ChangeDescen(root->lchild);
    ChangeDescen(root->rchild);
    tmp = root->lchild;
    root->lchild = root->rchild;
    root->rchild = tmp;
}
2. 给定一个数列,如何用归并排序算法把它排成升序,用c语言实现。
void MergeSort(int x[],int n) { //非递归归并排序
	//元素数组为x,其长度为n
	int i,j,k1,k2,l;
	int *a;
	for(i=1;i<=n-1;i=i*2)//i为插入排序的子段长度
	{
		for(j=1;j<=n-1;j=j+2*i)//j为进行插入排序的子段起始位置
		{
			a=(int *)malloc(2*i*sizeof(int));
			l=0;k1=j;k2=j+i;
			while((l<2*i)&&(k2<=n-1)&&(k2<j+2*i)&&(k1<j+i))
			{//子段中,比较,移至辅助内存
				if(x[k1]<x[k2])
				{
					a[l++]=x[k1];k1++;
				}
				else
				{
					a[l++]=x[k2];k2++;
				}
			}
			if((k2>n-1)||(k2>=j+2*i))
			{//子段的后一段超出数组范围
				for(;k1<j+i;k1++)
					a[l++]=x[k1];
			}
			else//就只有第一段就超数组了
			{
				if(k1>=j+i)
				{
					for(;(k2<j+2*i)&&(k2<=n-1);k2++)
						a[l++]=x[k2];
				}
			}
			for(k1=0;k1<l;k1++)//最后移位
			{
				x[j+k1]=a[k1];
			}free(a);
		}
	}
}
非递归的归并排序,我以前写的。
中间malloc与free的话,是为了方便管理不定大小的空间,这里需要malloc.h的头文件
3. 利用选择排序算法,对下面一组数进行排序(升序),并写出每趟排序结果:{49,38,65,97,76,13,27,59}
C语言实现冒泡排序
#include<stdio.h>
main(){
 int myArray[]={49,38,65,97,76,13,27,59};
 int i,j,temp;
 
for (i=1;i<8;i++) {
 for (j=i+1; j<8; j++) {
  if (myArray[j]>myArray[i]) {
   temp=myArray[j];
   myArray[j]=myArray[i];
   myArray[i]=temp;
  }
 }
 printf("第%d趟,%d",i+1,myArray[i]);
 printf("\n");
}
}
运行结果为:
第一趟:13,38,65,97,76,49,27,59;
第二趟:13,27,65,97,76,49,38,59;
第三趟:13,27,38,97,76,49,65,59;
第四趟:13,27,38,49,76,97,65,59;
第五趟:13,27,38,49,59,97,65,76;
第六趟:13,27,38,49,59,65,97,76;
第七趟:13,27,38,49,59,65,76,97;
第八趟:13,27,38,49,59,65,76,97; 
以下是用AS3.0语言写的:如果需要其它语言请说;
var myArray:Array=new Array(49,38,65,97,76,13,27,59);
var temp:Number;
for (var i:int=1; i<9; i++) {
 for (var j:int=0; j<8; j++) {
  if (myArray[j]>myArray[i]) {
   temp=myArray[j];
   myArray[j]=myArray[i-1];
   myArray[i-1]=temp;
  }
 }
 trace("第"+ i +"趟:"+myArray);
}
//第1趟:59,38,49,65,97,13,27,76
//第2趟:38,76,49,59,65,13,27,97
//第3趟:38,49,97,59,76,13,27,65
//第4趟:38,49,59,97,76,13,27,65
//第5趟:76,38,49,59,65,13,97,27
//第6趟:76,38,49,59,65,13,97,27
//第7趟:97,76,38,49,59,13,65,27
//第8趟:97,76,38,49,59,13,65,27
4. c语言编程:对10个数冒泡排序(升序)。
#include<stdio.h>
intmain(){
intnumber[10]={95,45,15,78,84,51,24,12,34,23};
for(int j=0;j< 9;j++)
for(int i=0;i< 9 -j;i++) {
if(a[i]>a[i+1]) {
int temp=a[i];a[i]=a[i+1];
a[i+1]=temp; }
}
for(int i=0;i< 10;i++){
printf(“%d”,a[i]); }
}

插入排序
已知一组升序排列数据a[1]、a[2]、……a[n],一组无序数据b[1]、b[2]、……b[m],需将二者合并成一个升序数列。
首先比较b[1]与a[1]的值,若b[1]大于a[1],则跳过,比较b[1]与a[2]的值,若b[1]仍然大于a[2],则继续跳过,直到b[1]小于a数组中某一数据a[x],则将a[x]~a[n]分别向后移动一位,将b[1]插入到原来a[x]的位置这就完成了b[1]的插入。
b[2]~b[m]用相同方法插入。
快速排序
快速排序是大家已知的常用排序算法中最快的排序方法。已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先任取数据a[x]作为基准。
比较a[x]与其它数据并排序,使a[x]排在数据的第k位,并且使a[1]~a[k-1]中的每一个数据<a[x],a[k+1]~a[n]中的每一个数据>a[x],然后采用分治的策略分别对a[1]~a[k-1]和a[k+1]~a[n]两组数据进行快速排序。
希尔排序
已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。
首先取一增量d(d<n),将a[1]、a[1+d]、a[1+2d]……列为第一组,a[2]、a[2+d]、a[2+2d]……列为第二组……,a[d]、a[2d]、a[3d]……列为最后一组以次类推,在各组内用插入排序,然后取d'<d,重复上述操作,直到d=1。
5. 已知一个无序数组a[ n ],试编写一算法,实现数组的升序排列。
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "conio.h"
#include "windows.h"
#define N 8
int a[N];
void init(int a[])  //将排序的数字输入
{ 
	int i;
	printf("请输入[%d]个数字:\n",N);
  for(i=0;i<N;i++)
   scanf("%d",&a[i]);
}
void print(int a[])  // 打印 
{
	int i;
   for(i=0;i<N;i++)
    printf("%5d",a[i]);
    printf("\n\n");
}
void sort(int a[])//排序
{
 int i,j,x;
 for(i=1;i<N;i++)
 {
  x=a[i];
  j=i-1;
 while((j>=0)&&(a[j]>x))
 {
   a[j+1]=a[j];
    j--;
 }
 
a[j+1]=x;
 }
}
/*void main()
{
 printf("现在开始排序!\n");
 init(a);
 system("cls");
 print(a); 
 sort(a);
 print(a);
}*/
void main()
{  
	char ch;
	int h,temp=0;
labl:
    system("cls");
   printf("\t\t===========================================\n\n");
   printf("\t\t---------------【1】.将排序的数字输入----\n\n");
   printf("\t\t---------------【2】.排序----------------\n\n");
   printf("\t\t---------------【3】.打印----------------\n\n");
   printf("\t\t---------------【4】.退出----------------\n\n");
talla:
   printf("请输入数字选项:_");
   scanf("%d",&h);
   switch(h)
   {
   
   case 1: 
               
   case 1: loop_1:
                init(a);
                 printf("\n 添加成功 !\n");
	                    printf("是否重新 【Y/N】:_");
						fflush(stdin);  
                         ch=getchar();
                              printf("%c",ch);
				              if(ch=='y'||ch=='Y')
							  {
								  Sleep(500);
								  goto loop_1;
							  }
							  else{
						         printf("\n是否返回 【Y/N】:_");
						           fflush(stdin);  
                                    ch=getchar();
                                    printf("%c",ch);
				                    if(ch=='y'||ch=='Y')
									{
								  Sleep(500);
								  goto loop_1;
									}	   
									else{
										printf("\n谢谢 使用 !\n");
										exit(0);
									}
							  }
   case 2:  						     
	            printf("\n未排序数字(一共有【%d】个数字) :\n",N);    
			   	print(a);
				printf("\n排序后的数字:\n");
				sort(a);
				print(a);
			          printf("\n是否返回菜单 【Y/N】:\n");
					     fflush(stdin);  
                          ch=getchar();
                              printf("%c",ch);
				              if(ch=='y'||ch=='Y')
							  {
								  printf("\n正在返回菜单.....!\n");
								       Sleep(500);	   
									  goto labl;
							  }
                                       else
                                       {
								       printf("谢谢 使用 !\n");
									   exit(0);
                                       }
   
   case 3:    
	            printf("\n一共有【%d】个数字 :\n",N);   
	            print(a); 
			    printf("\n 是否返回菜单  【Y/N】:_");
			            fflush(stdin);  
                         ch=getchar();
                              printf("%c",ch);
				              if(ch=='y'||ch=='Y')
							  {
								  printf("正在返回菜单.....!");
								       Sleep(500);	   
									   goto labl;
							  }
                                       else
                                       {
								       printf("谢谢 使用 !\n");
									   exit(0);
                                       }
case 4:  printf("谢谢 使用");  exit(0); 
   default:  printf("输入 有误 请重 输入 !");
	           goto talla;             	          
    
   }
}
6. 对10个整数进行排序(升序)。用C语言怎么编程
你好。。
适合使用冒泡排序法。示例如下:
#include<stdio.h>
#defineSIZE8
voidbubble_sort(inta[],intn);
voidbubble_sort(inta[],intn)//n为数组a的元素个数
{
inti,j,temp;
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
{
if(a[i]>a[i+1])//数组元素大小按升序排列
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
intmain()
{
intnumber[SIZE]={95,45,15,78,84,51,24,12};
inti;
bubble_sort(number,SIZE);
for(i=0;i<SIZE;i++)
{
printf("%d",number[i]);
}
printf(" ");
}
希望有所帮助~
7. c语言 堆排序算法升序排列N个数
#include<cstdio>
intarr[120000];
intmain()
{
intT,n;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(inti=1;i<=n;i++)
scanf("%d",&arr[i]);
sort(arr+1,arr+n+1);
for(inti=1;i<=n;i++)
printf("%d%c",arr[i],i==n?' ':'';
}
return0;
}
8. 升序排列是什么意思
升序:按从小到大的顺序排列(如1、3、5、6、7、9)。降序:就是按从大到小的顺序排列(如9、8、6、4、3、1)。

拓展资料:
排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序,若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。
反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。
常见排序算法
快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。
9. c#:排序算法的实现。分别利用冒泡、直接插入、直接选择算法实现排序(升序)。
#region 冒泡排序( 100k无序0-100k 21秒 )
        void mppx冒泡排序(int[] pxsz)
        {
            for (int j = 1; j < pxsz.Length; j++)
            {
                for (int i = 0; i < pxsz.Length - j; i++)
                {
                    if (pxsz[i] > pxsz[i + 1])
                    {
                        int temp = pxsz[i + 1];
                        pxsz[i + 1] = pxsz[i];
                        pxsz[i] = temp;
                    }
                }
            }
        }
        #endregion
#region 选择排序( 100k无序0-100k 10秒 )
        void xzpx选择排序(int[] pxsz)
        {
            int min_index;
            for (int i = 0; i < pxsz.Length - 1; i++)
            {
                min_index = i;
                for (int j = i + 1; j < pxsz.Length; j++)//每次扫描选择最小项 
                {
                    if (pxsz[j] < pxsz[min_index]) min_index = j;
                }
                if (min_index != i)//找到最小项交换,即将这一项移到列表中的正确位置 
                {
                    int temp = pxsz[i];
                    pxsz[i] = pxsz[min_index];
                    pxsz[min_index] = temp;
                }
            }
        }
        #endregion
#region 插入排序( 100k无序0-100k 5秒 )
        void crpx插入排序(int[] pxsz)
        {
            for (int i = 1; i < pxsz.Length; i++)//循环从第二个数组元素开始,因为arr[0]作为最初已排序部分 
            {
                int temp = pxsz[i];//temp标记为未排序第一个元素 
                int j = i - 1;
                while (j >= 0 && pxsz[j] > temp)/*将temp与已排序元素从小到大比较,寻找temp应插入的位置*/
                {
                    pxsz[j + 1] = pxsz[j];
                    j--;
                }
                pxsz[j + 1] = temp;
            }
}
        #endregion
