精华内容
下载资源
问答
  • C语言一维数组排序问题(一)

    万次阅读 多人点赞 2019-07-08 14:11:23
    基本思路:每次将相邻两个数比较,将小的(的)调前边。如图: 第趟后最大(最小)数 “沉底”,然后进行第二趟,第三趟。。。 如果有n个数,则要进行n-1趟比较,在第趟中进行n-1次两两比较,在第j趟中...

    1.起泡(冒泡)法排序

    基本思路:每次将相邻两个数比较,将小的(大的)调到前边。如图:

    在这里插入图片描述

    第一趟后最大(最小)数 “沉底”,然后进行第二趟,第三趟。。。

    如果有n个数,则要进行n-1趟比较,在第一趟中进行n-1次两两比较,在第j趟中进行n-j次两两比较。

    代码实现:

    #include <stdio.h>
    int main()
    {
        int i,j,t,a[11];    //定义变量及数组为基本整型
        printf("请输入10个数:\n");
        for(i=1;i<11;i++)
            scanf("%d",&a[i]);    //从键盘中输入10个数
        for(i=1;i<10;i++)    //变量i代表比较的趟数
            for(j=1;j<10-i;j++)    //变最j代表每趟两两比较的次数
                if(a[j]>a[j+1])
                {
                    t=a[j];    //利用中间变量实现两值互换
                    a[j]=a[j+1];
                    a[j+1]=t;
                }
                printf("排序后的顺序是:\n");
                for(i=1;i<=10;i++)
                    printf("%5d",a[i]);    //将冒泡排序后的顺序输出
            printf("\n");
        return 0;
    }

    运行结果:

    请输入10个数:
    66 32 23 45 25 5 15 69 46 37
    排序后的顺序是:
        5   15   23   25   32   37   45   46   66   69

     

     

     

     2.选择排序

    思路:选择排序的基本算法是从待排序的区间中经过选择和交换后选出最小的数值存放到 a[0] 中,再从剩余的未排序区间中经过选择和交换后选出最小的数值存放到 a[1] 中,a[1] 中的数字仅大于 a[0],依此类推,即可实现排序。

    程序中用到两个 for 循环语句。第一个 for 循环是确定位置的,该位置是存放每次从待排序数列中经选择和交换后所选出的最小数。第二个 for 循环是实现将确定位置上的数与后面待排序区间中的数进行比较的。

    #include <stdio.h>
    int main()
    {
        int i,j,t,a[11];    
        printf("请输入10个数:\n");
        for(i=1;i<11;i++)
            scanf("%d",&a[i]);    //从键盘中输入要排序的10个数字
        for(i=1;i<=9;i++)
            for (j=i+1;j<=10;j++)
                if(a[i]>a[j])    //如果前一个数比后一个数大,则利用中间变量t实现两值互换
                {
                    t=a[i];
                    a[i]=a[j];
                    a[j]=t;
                }
        printf("排序后的顺序是:\n");
        for(i=1;i<=10;i++)
            printf("%5d", a[i]);    //输出排序后的数组
        printf("\n");
        return 0;
    }

    运行结果:

    请输入10个数:
    526 36 2 369 56 45 78 92 125 52
    排序后的顺序是:
        2   36   45   52   56   78   92  125  369  526

     

     

    3.快速排序

    思路:快速排序是冒泡排序的一种改进,主要的算法思想是在待排序的 n 个数据中取第一个数据作为基准值,将所有记录分为 3 组,使第一组中各数据值均小于或等于基准值,第二组做基准值的数琚,第三组中各数据值均大于或等于基准值。这便实现了第一趟分割,然后再对第二组和第兰组分别重复上述方法,依次类推,直到每组中只有一个记录为止。

    #include <stdio.h>
    int qusort(int s[],int start,int end)    //自定义函数 qusort()快速排序
    {
        int i,j;    
        i=start;    //将每组首个元素赋给i
        j = end;    //将每组末尾元素赋给j
        s[0]=s[start];    //设置基准值
        while(i<j)
        {
            while(i<j&&s[0]<s[j])
            j--;    //位置左移
            if(i<j)
            {
                s[i]=s[j];    //将s[j]放到s[i]的位置上
                i++;    //位置右移
            }
            while(i<j&&s[i]<=s[0])
                i++;    //位置左移
            if(i<j)
            {
                s[j]=s[i];    //将大于基准值的s[j]放到s[i]位置
                j--;    //位置左移
            }
        }
        s[i]=s[0];    //将基准值放入指定位置
        if (start<i)
            qusort(s,start,j-1);    //对分割出的部分递归调用qusort()函数
        if (i<end)
            qusort(s,j+1,end);
        return 0;
    }
    int main()
    {
        int a[11], i;    //定义数组及变量为基本整型
        printf("请输入10个数:\n");
        for(i=1;i<=10;i++)
            scanf("%d",&a[i]);    //从键盘中输入10个要进行排序的数
        qusort(a,1,10);    //调用qusort()函数进行排序
        printf("排序后的顺序是:\n");
        for(i=1;i<=10;i++)
            printf("%5d",a[i]);    //输出排好序的数组
        printf("\n");
        return 0;
    }

    运行结果:

    请输入10个数:
    99 45 12 36 69 22 62 796 4 696
    排序后的顺序是:
        4   12   22   36   45   62   69   99  696  796

     

    4.插入法排序 

    插入排序是把一个记录插入到已排序的有序序列中,使整个序列在插入该记录后仍然有序。插入排序中较简单的种方法是直接插入排序,其插入位置的确定方法是将待插入的记录与有序区中的各记录自右向左依次比较其关键字值的大小。本实例要求使用直接插入排序法将数字由小到大进行排序。

    原始顺序:25 12 36 45 2 9 39 27 98 37
     

    表1 直接插入排序过程
    趟数监视哨排序结果
    125(12,)25,36,45,2,9,39,22,98,37
    212(12,25,)36,45,2,9,39,22,98,37
    336(12,25,36,)45,2,9,39,22,98,37
    445(12,25,36,45,)2,9,39,22,98,37
    52(2,12,25,36,45,)9,39,22,98,37
    69(2,9,12,25,36,45,)39,22,98,37
    739(2,9,12,25,36,39,45,)22,98,37
    822(2,9,12,22,25,36,39,45,)98,37
    998(2,9,12,22,25,36,39,45,98,)37
    1037(2,9,12,22,25,36,37,39,45,98,)

    本算法中使用了监视哨,主要是为了避免数据在后移时丢失

    #include <stdio.h>
    int insort(int s[], int n)    /* 自定义函数 insort()*/
    {
        int i,j;
        for(i=2;i<=n;i++)    //数组下标从2开始,s[0]做监视哨,s[1]一个数据无可比性
        {
            s[0]=s[i];    //给监视哨陚值
            j=i-1;    //确定要比较元素的最右边位置
            while(s[0]<s[j])
            {
                s[j+1]=s[j];    //数据右移
                j--;    //移向左边一个未比较的数
            }
            s[j+1]=s[0];    //在确定的位置插入s[i]
        }
        return 0;
    }
    int main()
    {
        int a[11],i;    //定义数组及变量为基木整型
        printf("请输入10个数据:\n");
        for (i =1;i<=10;i++)
            scanf("%d",&a[i]);    //接收从键盘输入的10个数据到数组a中
        printf("原始顺序:\n");
        for(i=1;i<11;i++)
            printf("%5d",a[i]);    //将未排序前的顺序输出
        insort(a,10);    //调用自定义函数 insort()
        printf("\n 插入数据排序后顺序:\n");
        for(i=1;i<11;i++)
            printf("%5d",a[i]); //将排序后的数组输出
        printf("\n");
        return 0;
    }

     

    运行结果:

    请输入10个数据:
    25 12 36 45 2 9 39 22 98 37
    原始顺序:
       25   12   36   45    2    9   39   22   98   37
    插入数据排序后顺序:
        2    9   12   22   25   36   37   39   45   98

     

    附上相关链接https://blog.csdn.net/come_closer/article/details/89426570

     

    展开全文
  • C语言 一维数组排序 数组有不定个数的0怎么办 求教答案:3信息版本:手机版解决时间 2019-10-03 04:29已解决2019-10-03 00:39一个一维数组c[30]是由随机数产生的,前N位(N<=30)是一些小于1000的非0随机数,后面的...

    C语言 一维数组排序 数组有不定个数的0怎么办 求教

    答案:3  信息版本:手机版

    解决时间 2019-10-03 04:29

    已解决

    2019-10-03 00:39

    一个一维数组c[30]

    是由随机数产生的,前N位(N<=30)是一些小于1000的非0随机数,后面的都是0,N是随机的,每次执行程序都不同。

    也就是像{12,34,56,78,90,123,412,345,2,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,(后面都是0,共30个数)}这样的。

    现在要把前面的数字从小到大排序,输出排序后的不含0的结果。

    怎么做啊。。求指教。。

    尽量别用太高级的命令吧。。我刚学C程。。只会最基本的。。拜托了。。

    最佳答案

    2019-10-03 00:45

    这么简单的东西,不用过多用库函数。使用辅助数组b,必须是int型的。将数组c[30]中的元素的值作为数组b的下标,在数组b中的下标的值加1.当然,数组c中的0一直在数组b的第一位。

    输出时,从数组b的第二位开始,输出那些值不是0的下标.

    我用的java,大致算法是一样的。

    使用伪码实现

    public void sort(){

    c[30]={......};

    b[30]={0,...};

    for(int i=0;i0){

    c[j++]=i;//辅助数组c用来存储 由小到大排列的数。j从0开始.数组c就是你要获得的

    }

    }

    }

    全部回答

    1楼

    2019-10-03 03:07

    #include"stdio.h"

    void main()

    {

    int a[4][5]={7,5,3,4,34,67,76,9,4,8,4,54,33,46,7,4,1,44,109,10};

    int i,j,k,s;

    for(i=0;i<4;i++)

    for(j=0;j<5;j++)

    {

    for(s=j;s<5;s++)

    {

    if(a[i][j]>a[i][s+1])

    {

    k=a[i][s+1];

    a[i][s+1]=a[i][j];

    a[i][j]=k;

    }

    }

    }

    for(i=0;i<4;i++)

    {

    for(j=0;j<5;j++)

    printf("%5d",a[i][j]);

    printf("\n");

    }

    printf("\n");

    }

    这是把没一行都用冒泡法排列,我在写一个把整个二维数组集体排序的

    2楼

    2019-10-03 02:15

    //一个一维数组c[30]

    //是由随机数产生的,前N位(N<=30)是一些小于1000的非0随机数,后面的都是0,N是随机的,每次执行程序都不同。

    //也就是像{12,34,56,78,90,123,412,345,2,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,(后面都是0,共30个数)}这样的。

    //现在要把前面的数字从小到大排序,输出排序后的不含0的结果。

    #include

    #include //调用rand(),srand()

    #include //调用time()

    int main(void)

    {

    int c[30];

    int n;

    int i;

    srand(time(0)); //srand()是个库函数,它能试每次程序开始时随机函数的种子为随机

    n=rand()%30; //除以30取余数能得到0~29,加上1就得到1~30,表示产生的数是1~30个

    for(i=0;i

    c[i]=rand()%999+1; //这里用库函数rand产生随机数

    //除以999取余数能得到0~998,加上1就得到1~999

    //此时i为n,所以n开始到1000个数

    //剩余的数都为0

    for(i=n;i<30;i++)

    c[i]=0;

    for(i=0;i<30;i++)

    {

    printf("%5d ",c[i]);

    if(i%5==4) //用于控制每行输出数量

    printf("\n");

    }

    }

    我已经用很简单的方法让你明白了,这里产生随机数我调用了库函数,其实也可以自己编,不过比较复杂我就免去了,你就把库函数当成是一个可以拿来用的公式就可以了,望采纳

    我要举报

    如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

    大家都在看

    推荐资讯

    展开全文
  • C语言一维数组

    万次阅读 多人点赞 2019-04-19 15:03:03
    、什么是数组 数组是相同数据类型的元素的集合,它是种符合类型。 二、数组的创建与初始化 数组的一般形式为: `数组类型 数组名[数组大小] 例: int a[10]; 注:数组的大小不能为零 *数组的下标是从...

    一、什么是数组

    数组是相同数据类型的元素的集合,它是一种符合类型。

    二、一位数组的创建与初始化

    数组的一般形式为:

    `数组类型   数组名[数组大小]
    例:  int a[10];
    注:数组的大小不能为零
     *数组的下标是从0开始的。
    

    数组的初始化:
    相当于给数组赋值;
    我们一般运用for循环来给数组进行赋值;

        int a[10];
    	int i;
    	for(i=0;i<10;i++)
    	{
    		scanf("%d",&a[i]);
    	}
    

    也可以直接在定义时给数组赋值:

    int a[10]={1,2,3,4,5,6,7,8,9,10};
    
    注:也可以为:
    int a[10]={1};
    此时只有a[0]赋值为1,剩下9位都为0
    

    这里就会输入10个数给数组;
    我们也可以运用for循环来使这十个数输出出来:

    for(i=0;i<10;i++)
    	{
    		printf("%d  ",a[i]);
    	}
    

    三、冒泡排序法

    应用:当我们让数组内的数从小到大排序时,
    可以用冒泡排序法。

    冒泡排序的原理:从左到右,从第一个元素开始
    比较,相邻两个元素之间相互比较找出这一轮中
    最大的那个数,放到最右边。这个数就从序列中
    冒出。第二轮再在剩下的9个元素中相邻两个元
    素之间相互比较找出序列中最大的那个数。依次
    循环,就实现了从小到大的排序。

    主要部分的代码如下:

    for(i=0;i<10;i++)
    	{
    		for(j=0;j<10-i-1;j++)
    		{
    			if(a[j]>a[j+1])
    			{
    				k=a[j];
    				a[j]=a[j+1];
    				a[j+1]=k;
    			}
    		}
    	}
    

    四、选择排序法

    选择排序法与冒泡排序法相似。

    选择排序法是从算法优化角度对冒泡排序法
    的改进。其思想为:经过一轮两两比较后,
    并不马上交换元素的位置,而是找到本轮
    最小的数,记下该数的下标,待本轮比较完
    毕后,将本轮最小的数交换到位。

    主要部分的代码如下:

    	for(i=0;i<10;i++)
    	{
    		for(j=i+1;j<10;j++)
    		{
    			if(a[i]>a[j])
    			{
    				k=a[i];
    				a[i]=a[j];
    				a[j]=k;
    			}
    		}
    	}
    
    展开全文
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼这是我的代码、、问题出在换行的时候sum[i][j]的值还保存着上行的值、、#include "stdafx.h"#include"stdio.h"int main(){int sum[3][4]={{2,3,4,5},{4,3,2,5},{1,3,5,...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    这是我的代码、、问题出在换行的时候sum[i][j]的值还保存着上一行的值、、

    #include "stdafx.h"

    #include"stdio.h"

    int main(){

    int sum[3][4]={{2,3,4,5},{4,3,2,5},{1,3,5,9}};

    for(int i=0;i<3;i++)

    {

    for(int j=0;j<4;j++)

    {

    printf(" %d",sum[i][j]);

    }

    printf("\n");

    }

    printf("----------对每一行进行排序\n");

    for(int i=0;i<3;i++)//控制数组的行

    {

    for(int k=0;k<4;k++){//控制列进行比较大小

    for(int j=0;j<4-k;j++){ //控制数组的列

    if(sum[i][j]

    { int temp=sum[i][j];

    sum[i][j]=sum[i][j+1];

    sum[i][j+1]=temp;

    }

    }

    }

    }

    for(int i=0;i<3;i++)

    { for(int j=0;j<4;j++)

    {

    printf(" %d",sum[i][j]);

    }

    printf("\n");

    }

    getchar();

    return 0;

    }

    展开全文
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼这是我的代码、、问题出在换行的时候sum[i][j]的值还保存着上行的值、、#include "stdafx.h"#include"stdio.h"int main(){int sum[3][4]={{2,3,4,5},{4,3,2,5},{1,3,5,...
  • 编写程序,实现一维数组排序。对一维数组按照从小到大的顺序排序。程序定义函数sort()来实现数组a的排序。函数原型如下: void sort(int a[], int n); 数组元素的输出调用PrintArr()。 输入要求:第一行输入一个整数...
  • C语言一维数组&&二维数组练习

    千次阅读 2014-09-18 18:51:55
    哥们今天刚学习了C语言数组,就
  • c语言输入个二维数组,找出每行的最大值输出#include //首先指定M和N的值 #define M 3 #define N 3 int main() { printf("There are %d rows %d columns.\n", M, N); //输出屏幕的提示信息 int a[M][N] = { 0 };...
  • C语言-一维数组的定义和引用-数组.ppt》由会员分享,可在线阅读,更多相关《C语言-一维数组的定义和引用-数组.ppt(47页珍藏版)》请在人人文库网上搜索。1、第七章分组数组:它是一种构造类型,元素由基本类型(整体...
  • C语言一维数组练习2

    千次阅读 2020-04-26 17:39:03
    开始,全班同学都按身高排成了列纵队,可是不巧的是,同学们都背对着体育老师,这个时候,只见体育老师深吸口气,大声地喊了句:“向后转!” 小吴是名小小程序猿,看到这样的场景,他不禁想到了个问题,...
  • 问题描述:个足够大的二维数组a[ ][2]中,存放了n对坐标,例如第个坐标是(5,6),那么a[0][0]=5,a[0][1]=6,依此类推,将存放的这些坐标对,按照纵坐标从小到大的顺序进行排列。 输入: (1,25) (20,...
  • 二维数组的实验报告高级语言程序设计实验报告班级: 0900 姓名: 学号: 09006课程名称高级语言程序设计实验项目一级指针与一维数组变成及函数编程练习实验项目类型验证演示综合设计指导教师李养群成 绩一、实验目的...
  • 次代码用数组实现数字存储,冒泡排序排序数字。 /*初学C语言,有不足还请指正*/ ...int main() // 用冒泡排序法判断输入数据并由小到大输出。 { while (1) { int i = 0; int j = 0; int temp = 0; ...
  • 因此,当你的程序完成时,sorted数组应该包含raw数组中按照从小到大排序的数值。(提示:确保在每次经历个很高的数字期间重新设置被选取的最小数值,[color=#FF0000]以使它不再被选择[/color]。你将需要在第个...
  • C++将一维数组从小到大进行排序

    万次阅读 多人点赞 2019-10-16 11:19:18
    C++将数组从小到大进行排序发现思考应用 发现 1.先放段简单代码void swip(int data1, int data2) { int temp; temp = data1; data1 = data2; data2 = temp; } int main(){ int a=3;int b=4; swip(a,b); cout<&...
  • C语言第9讲--一维数组的基本应用第七讲 高级数据结构;;数组是属于同种数据类型的多个变量的集合。int a[10];即定义了10个变量,每个变量都是整型变量。各变量名字分别为a[0]、a[1]、a[2]、...、a[9]。定义数组相当于...
  • C语言冒泡排序数组按照从小到大进行排序

    万次阅读 多人点赞 2018-03-05 10:28:55
    对其10个整数由小到大进行排序 思想:冒泡排序 实现: #include&lt;stdio.h&gt; int main() { int i = 0; int a[10] = {0,5,2,3,6,9,8,7,4,1}; int j = 0; int tmp = 0; ...
  • 一维数组按照从小到大的顺序排序。 输入 第一行输入一个整数n(1<=n<=10),表示数组有n个整数;第二行输入n个整数。 输出 输出占一行。对这n个整数数按照从小到大的顺序输出,数据之间用一个空格隔开。 样例...
  • 文章目录一、一维数组名称含义二、数组指针三、二维数组名称含义四、选择排序五、指针数组排序 一、一维数组名称含义 一维数组名称含义: 1.除了两种特殊情况,一维数组名称都是指向数组首元素地址的指针。 特殊情况...
  • 满意答案xvercjdl32013.10.07采纳率:47%等级:10已帮助:272人#include#includeintcmp(constvoid*a,constvoid*b){return*(int*)a>*(int*)b;}intmain(){intarr[5][5];inttmp[5];intct=0;inti,j;...
  • 一维数组排序

    2021-06-04 09:41:47
    一维数组按照从小到大的顺序排序。程序定义函数sort()来实现数组a的排序。函数原型如下: void sort(int a[], int n); 数组元素的输出调用PrintArr()。 输入 第一行输入一个整数n(1<=n<=10),表示数组有n个...
  • C语言维数组

    2014-10-21 20:45:42
    回想一维数组定义方式   // 类型修饰符 数组名 [ 元素个数 ] = { 初始值 ...}   //int array[5] = {1, 3, 2, 9, 4};   // 创建一个二维数组   // 类型修饰符 数组名 [ 包含几个...
  • #include int main() { int...5和最小值1无法排前面,故设置个K来使多比较几次,从而使得这两值排前面。 代码结果如下: 如果去除for(k=0;k;k++),结果为: 看得出来第1行和第二行的数据的顺序没有得到有效排序
  • 1456: 一维数组排序

    2020-11-15 18:03:34
    1456: 一维数组排序 1.描述 对一维数组按照从小到大的顺序排序。 输入 第一行输入一个整数n(1<=n<=10),表示数组有n个整数;第二行输入n个整数。 输出 输出占一行。对这n个整数数按照从小到大的顺序输出,...
  • 1119: 一维数组排序

    千次阅读 2017-11-06 16:26:17
    1119: 一维数组排序 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 5841 Solved: 3138 SubmitStatusWeb Board Description 对一维数组按照从小到大的顺序排序。程序定义函数sort()来实现数组a的...
  • 维数组从小到大排序

    千次阅读 2019-01-05 23:32:06
    先将二维数组转化为一维数组排序后再转化为二维数组输出。 #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main() { int n,m,i,j,t,a[100][100],b[200]; int u=0,k=0; scanf("%d...
  • 程序:不妨按从小到大排序#include stdio.h>int main (){ int a[10]; int i = 0; int j = 0; int t = 0; printf ("input 10 numbers:"); for ( i = 0; i 10; i++) { scanf ("%d",&a...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼这是我的代码、、问题出在换行的时候sum[i][j]的值还保存着上行的值、、#include "stdafx.h"#include"stdio.h"int main(){int sum[3][4]={{2,3,4,5},{4,3,2,5},{1,3,5,...
  • 1119: 一维数组排序 题目描述 对一维数组按照从小到大的顺序排序。程序定义函数sort()来实现数组a的排序。函数原型如下: void sort(int a[], int n); 数组元素的输出调用PrintArr()。 输入 第一行输入一个整数n(1&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,597
精华内容 1,438
关键字:

c语言一维数组排序从小到大

c语言 订阅