永发信息网

怎样用C语言对一串整行数从大到小排序

答案:3  悬赏:30  手机版
解决时间 2021-01-25 07:29
怎样用C语言对一串整行数从大到小排序
最佳答案
#include <iostream>
using namespace std;
int main()
{int i,j,min,temp,a[11];<br> cout<<"enter data:"<<endl;<br> for (i=1;i<=10;i++)<br> {cout<<"a["<<i<<"]=";<br> cin>>a[i]; //输入10个数 <br> }
cout<<endl<<"The original numbers:"<<endl;;
for (i=1;i<=10;i++)
cout<<a[i]<<" "; // 输出这10个数
cout<<endl;;
for (i=1;i<=9;i++) //以下对10个数排序
{min=i;<br> for (j=i+1;j<=10;j++)<br> if (a[min]>a[j]) min=j;<br> temp=a[i]; //以下3行将a[i+1]~a[10]中最小者与a[i] 对换<br> a[i]=a[min];<br> a[min]=temp;<br> }
cout<<endl<<"The sorted numbers:"<<endl;
for (i=1;i<=10;i++) // 输出已排好序的10个数
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
全部回答

#include <iostream> using namespace std; int main()   {int i,j,min,temp,a[11];    cout<<"enter data:"<<endl;    for (i=1;i<=10;i++)    {cout<<"a["<<i<<"]=";     cin>>a[i];    //输入10个数    }    cout<<endl<<"the original numbers:"<<endl;;    for (i=1;i<=10;i++)     cout<<a[i]<<" ";    // 输出这10个数    cout<<endl;;    for (i=1;i<=9;i++)    //以下对10个数排序     {min=i;     for (j=i+1;j<=10;j++)     if (a[min]>a[j]) min=j;     temp=a[i];    //以下3行将a[i+1]~a[10]中最小者与a[i] 对换     a[i]=a[min];     a[min]=temp;     }    cout<<endl<<"the sorted numbers:"<<endl;    for (i=1;i<=10;i++)    // 输出已排好序的10个数     cout<<a[i]<<" ";    cout<<endl;    return 0;  } 

方法太多了,当然各种时间排序的时间复杂度和空间复杂度不同、稳定性也不同。最简单的我觉得就是冒泡排序了,也最形像。 void select_sort(int *x, int n) { int i, j, min, t; for (i=0; i<n-1; i++) { min = i; for (j=i+1; j<n; j++) { if (*(x+j) < *(x+min)) { min = j; } } if (min != i) { t = *(x+i); *(x+i) = *(x+min); *(x+min) = t; } } } void insert_sort(int *x, int n) { int i, j, t; for (i=1; i<n; i++) { t=*(x+i); for (j=i-1; j>=0 && t<*(x+j); j--) { *(x+j+1) = *(x+j); } *(x+j+1) = t; } } void bubble_sort(int *x, int n) { int j, k, h, t; for (h=n-1; h>0; h=k) { for (j=0, k=0; j<h; j++) { if (*(x+j) > *(x+j+1)) { t = *(x+j); *(x+j) = *(x+j+1); *(x+j+1) = t; k = j; } } } } void shell_sort(int *x, int n) { int h, j, k, t; for (h=n/2; h>0; h=h/2) { for (j=h; j<n; j++) { t = *(x+j); for (k=j-h; (k>=0 && t<*(x+k)); k-=h) { *(x+k+h) = *(x+k); } *(x+k+h) = t; } } } void quick_sort(int *x, int low, int high) { int i, j, t; if (low < high) { i = low; j = high; t = *(x+low); while (i<j) { while (i<j && *(x+j)>t) { j--; } if (i<j) { *(x+i) = *(x+j); i++; } while (i<j && *(x+i)<=t) { i++; } if (i<j) { *(x+j) = *(x+i); j--; } } *(x+i) = t; quick_sort(x,low,i-1); quick_sort(x,i+1,high); } } void sift(int *x, int n, int s) { int t, k, j; t = *(x+s); k = s; j = 2*k + 1; while (j<n) { if (j<n-1 && *(x+j) < *(x+j+1)) { j++; } if (t<*(x+j)) { *(x+k) = *(x+j); k = j; j = 2*k + 1; } else { break; } } *(x+k) = t; } void heap_sort(int *x, int n) { int i, k, t; int *p; for (i=n/2-1; i>=0; i--) { sift(x,n,i); } for (k=n-1; k>=1; k--) { t = *(x+0); *(x+0) = *(x+k); *(x+k) = t; sift(x,k,0); } } void main() { #define MAX 4 int *p, i, a[MAX]; p = a; printf("Input %d number for sorting :\n",MAX); for (i=0; i<MAX; i++) { scanf("%d",p++); } printf("\n"); p = a; select_sort(p,MAX); for (p=a, i=0; i<MAX; i++) { printf("%d ",*p++); } printf("\n"); system("pause"); }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
图2和图3是某地附近两区域等值线分布图(比例
小提琴的故事
如图是实验室制取干燥氧气的装置: (1)写出
谁能给个柱鲁的加点攻略
Are you an optimist? Do you look at your g
古人记事方法
爱情公寓2一共几集
柔软时光咖啡屋地址好找么,我有些事要过去
【指南针是谁发明的】我国四大发明之一的指南
蓝色车牌是什么车?
有象征意义的东西
《人兽鬼》中人,兽,鬼三类的象征意义
【与其临渊羡鱼】“与其临渊羡鱼,不如退而结
老宝来和新宝来发动机一样吗
唐骏小宝马暖风怎么开通
推荐资讯
在鸡蛋承受压力试验中为什么鸡蛋能够承受如此
吃完药后头晕怎么办
下列有关现代生物技术的叙述中,正确的是BA.
耸山村地址有知道的么?有点事想过去
皇家影社摄婚纱摄影名店地址在什么地方,我要
《我恋爱的一切》怎么这么好看
有谁用过一窝蜂电商软件怎么样?
【云朝暮雨】朝云暮雨中朝的意思是什么
美国河流与地形的相互关系
瑞士苏黎世机场入境会检查行李吗
相遇日期+生日+星座÷幸运号码=520怎么算的
移动全网通飞享套餐说可以叠加5-40元的流量包
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?