精华内容
下载资源
问答
  • C语言编写冒泡排序

    2020-01-07 15:42:17
    一、常规冒泡排序 #include<stdio.h> #define N 10 int main() { int temp,a[N]; for(int i=0;i<N;i++) scanf("%d",&a[i]); //下面是冒泡排序 for(i=0;i<N-1;i++) for(int j=0;j<N-1...

    现在在期末,正好帮自己整理一下
    一、常规冒泡排序

    #include<stdio.h>
    #define N 10
    int main()
    {
    int temp,a[N];
    for(int i=0;i<N;i++)
        scanf("%d",&a[i]);
    //下面是冒泡排序
    for(i=0;i<N-1;i++)
       for(int j=0;j<N-1-i;j++)
           if(a[j]>a[j+1])
           {
           temp=a[j];
           a[j]=a[j+1];
           a[j+1]=temp;
           }
    for(i=0;i<N;i++){
        printf("%5d",a[i]);
        if((i+1)%5==0)
           printf("\n");
    return 0;

    二、函数版,传递数组名

    #include<stdio.h>
    void maopao(int a[],int n);
    #define N 10
    int main()
    {
    int a[N]={23,43,54,3,5,56,45,76,4,87};
    charu(a,N);
    for(int i=0;i<N;i++)
        printf("%5d",a[i]);
    return 0;
    //下面是冒泡排序
    void maopao(int a[],int n)
    {
    int temp;
    for(int i=0;i<n-1;i++)
        for(int j=0;j<n-1-i;j++)
            if(a[j]>a[j+1])
            {
            temp=a[j];
            a[j]=a[j+1];
            a[j+1]=temp;
            }
    }

    三、函数之间传递指针

    #include<stdio.h>
    void maopao(int *ptr,int n);
    void input(int *ptr,int n);
    void output(int *ptr,int n);
    #define N 10
    int main()
    {
    int a[N],*p;
    p=a;
    printf("Please input.\n");
    input(p,N);
    maopao(p,N);
    printf("There are outputs.\n");
    output(p,N);
    return 0;
    }
    void maopao(int *ptr,int n)
    {
    int temp,*p;
    p=ptr
    for(int i=0;i<n;i++)
    {
       ptr=p;
       for(int j=0;j<n;j++)
          if(*ptr>*(ptr+1))
          {
              temp=*ptr;
              *ptr=*(ptr+1);
              *(ptr+1)=temp;
           }
           ptr++;
    }
    }
    void input(int *ptr,int n)
    {
    int *p_end;
    p_end=ptr+n;
    for(;ptr<p_end;ptr++)
        scanf("%d",ptr);
    }
    void output(int *ptr,int n)
    {
    int *p_end;
    p_end=ptr+n;
    for(;ptr<p_end;ptr++)
        printf("%5d",*ptr);
    }
    展开全文
  • c语言编写冒泡排序

    2020-04-09 10:40:17
    #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int a[10],i,m,t; for(i=0;i<=9;i++) //通过循环输入10个整数赋给数组a[10] scanf("%d",&...m--){ ...
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[]) {
    	int a[10],i,m,t;
    
    	for(i=0;i<=9;i++)  //通过循环输入10个整数赋给数组a[10]
    	scanf("%d",&a[i]);
    	
    	for(m=9;m>0;m--){  //第一层循环
    		for(i=0;i<=m;i++){  //第二层循环
    		//判断大小,交换索引
    		if(a[i]>a[i+1]){
    			t=a[i],a[i]=a[i+1],a[i+1]=t;
    		}	
    		}
    	} 
    
         //循环输出排列好的数组
    	for(i=0;i<=9;i++){
    		printf("%d ",a[i]); 
    	}
    	return 0;
    }
    
    
    展开全文
  • C语言编写冒泡排序

    2011-06-15 22:20:31
    C语言描述冒泡排序,对一组数据或记录进行由小到大的排序
  • C语言编写冒泡排序

    万次阅读 多人点赞 2018-08-16 13:22:00
    版权声明:本文为博主原创...在visual C++ 6.0上,用C语言编写冒泡排序 百度经验:jingyan.baidu.com 工具/原料 visual C++ 6.0 百度经验:jingyan.baidu.com 方法/步骤 1 打开visualC++6.0- 文件-新建-文...

    版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/qq_42680327

    在visual C++ 6.0上,用C语言编写,冒泡排序

    百度经验:jingyan.baidu.com

    工具/原料

    • visual C++ 6.0

    百度经验:jingyan.baidu.com

    方法/步骤

    1 打开   visualC++6.0- 文件-新建-文件- C++ Source

    2 定义变量和数组:

    #include<stdio.h>

    void main()

    {

       int i, j, t, a[10];                  //定义变量及数组为基本整型

    3 输入的10个数:

        printf("Please input numbers: ");

        for (i = 1; i < 10; i++)

            scanf("%d", &a[i]);              //从键盘输入要排序的数组

    4 比较并排序:

      for(i=0;i<10;i++){
          for(j=i+1;j<=9;j++){
                  if(a[i]>a[j]){            //如果后一个数比前一个数大利用中间变量t实现俩值互换
                      t=a[i];
                     a[i]=a[j];
                      a[j]=t;
                 }
           }
     }

    5 输出结果:

     printf("Please output numbers: ");
     for(i=0;i<=9;i++){
           printf("%-3d",a[i]);            //将排好序的数组输出
     }
         printf("\n");

    6 完整的源代码:

    #include <stdio.h>
    void main(){
    	int i,j,t,a[10];                   //定义变量数组基本类型
    	printf("Please input numbers: ");
    	for(i=0;i<10;i++){
    		scanf("%d",&a[i]);             //从键盘输入要排序的数组
    	}	
    	for(i=0;i<10;i++){
    		for(j=i+1;j<=9;j++){
    			if(a[i]>a[j]){            //如果后一个数比前一个数大利用中间变量t实现俩值互换
    				t=a[i];
    				a[i]=a[j];
    				a[j]=t;
    			}
    		}
    	}
    	printf("Please output numbers: ");
    	for(i=0;i<=9;i++){
    		printf("%-3d",a[i]);
    	}
    	printf("\n");
    }

     

    展开全文
  • C语言编写通用冒泡排序函数

    千次阅读 2019-02-20 17:40:34
    C语言模拟实现qsort函数 一、首先用冒泡排序法对一个数组进行排序: 注:此处为升序排列

    用C语言编写通用冒泡排序函数

    一、 首先明确如何用冒泡排序法对一个整型数组元素进行排序:
    注:此处为升序排列,代码详见文章“用冒泡排序法对数组中的元素排序
    二、
    base为一个无类型的指针变量,用于接收在主函数中传给此排序函数地址;
    num表示需要排序的元素个数
    width表示每个元素的宽度,即所占的字节个数
    cmp是一个指向函数的指针,即函数指针,其指向的函数参数类型为(const void* e1, const void* e2)),返回值为int,因此cmp用于接受这个函数的地址
    Swap((char*)base+widthj, (char)base+width*(j+1), width);此函数功能为将每两个元素按字节交换,传递的实参为要交换的两元素各自的地址元素的宽度,即字节数

    void My_qsort(void* base, size_t num, size_t width, int (*cmp)(const void* e1, const void* e2))
    {
    	size_t i = 0;//size_t定义的变量只保存这个整数
    	size_t j = 0;
    	for (i = 0; i < num-1; i++)
    	{
    		for (j = 0; j < num - i - 1; j++)
    		{
    			if (cmp((char* )base + width * j, (char* )base + width * (j + 1))>0)//base的类型是void*,不能直接进行解引用操作或加减乘除运算
    			{
    				//先将base强制类型转换为char*,即指向一个字节的指针,加上元素个数乘以1个元素的字节宽度,此时表达式的值则指向其后第j个元素的地址
    				Swap((char*)base+width*j, (char*)base+width*(j+1), width);
    			}
    		}
    	}
    }
    

    三、int_cmp()函数
    两个形参接收My_qsort()函数中调用此函数时传递过来的两元素的地址,这两个地址类型均为void*

    int int_cmp(const void* e1, const void* e2)
    {
    	return *((int*)e1) - *((int*)e2);//决定了升序排列
    }
    

    将e1和e2这两个参数均强制类型转换为int*,此时两参数是步长为4个字节的指针,分别解引用即可得到两元素的值,返回第一个元素减第二个元素的值
    为负数或0,不交换;
    为正数,交换;

    交换与否由My_sort()函数中的条件决定:返回值为正,调用Swap()函数交换
    四、Swap()函数
    将传过来的两元素各自的地址强制类型转换为char* 类型的指针,指针的步长变为1个字节,给其+i,则跳过i个字节,每两个元素按字节交换,宽度width是一个元素所占的字节数,因此宽度决定了两个元素按字节交换要交换多少次

    void Swap(void* p1, void* p2, size_t width)
    {
    	char tmp;
    	size_t i = 0;
    	for (i = 0; i < width; i++)
    	{
    		tmp = *((char*)p1 + i);
    		*((char*)p1 + i) = *((char*)p2 + i);
    		*((char*)p2 + i) = tmp;
    	}
    }
    

    按字节交换后即等价于将两元素直接交换
    五、测试对int型数组的排序

    void test_int()
    {
    	size_t i = 0;
    	int arr[10] = { 2,5,6,8,9,3,4,0,1,7 };
    	size_t num = sizeof(arr) / sizeof(arr[0]);
    	size_t width = sizeof(arr[0]);
    	My_qsort(arr, num, width, int_cmp);//传函数名cmp,用一个函数指针接收
    	for (i = 0; i < num; i++)
    	{
    		printf("%d ", arr[i]);
    	}
    }
    

    六、测试对结构体数组的同类型成员的排序
    其struct_cmp()函数为:

    int struct_cmp(const void* e1, const void* e2)
    {
    	return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
    }
    

    声明一个结构体:

    struct stu {
    	char name[10];
    	int num;
    	double score;
    };
    void test_struct()
    {
    	struct stu stu[4] = { {"zhangsan",1007,98.6},{"lisi",1024,87.9},{"wangwu",1002,99.7} };
    	size_t i = 0;
    	size_t num = sizeof(stu) / sizeof(stu[0]);
    	size_t width = sizeof(struct stu);
    	My_qsort(stu, num, width, struct_cmp);
    	for (i = 0; i < num; i++)
    	{
    		printf("%s ", (stu+i)->name);
    	}
    	return 0;
    }
    

    七、主函数

    void main()
    {
    	test_int();//调用测试整型数组的函数
    	test_struct();//调用测试结构体数组的函数
    	system("pause");
    	return 0;
    }
    

    八、完整代码如下

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    struct stu {
    	char name[10];
    	int num;
    	double score;
    };
    int int_cmp(const void* e1, const void* e2)
    {
    	return *((int*)e1) - *((int*)e2);//决定了升序排列
    }
    int struct_cmp(const void* e1, const void* e2)
    {
    	return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
    }
    void Swap(void* p1, void* p2, size_t width)
    {
    	char tmp;
    	size_t i = 0;
    	for (i = 0; i < width; i++)
    	{
    		tmp = *((char*)p1 + i);
    		*((char*)p1 + i) = *((char*)p2 + i);
    		*((char*)p2 + i) = tmp;
    	}
    }
    void My_qsort(void* base, size_t num, size_t width, int (*cmp)(const void* e1, const void* e2))
    {
    	size_t i = 0;//size_t定义的变量只保存这个整数
    	size_t j = 0;
    	for (i = 0; i < num-1; i++)
    	{
    		for (j = 0; j < num - i - 1; j++)
    		{
    			if (cmp((char* )base + width * j, (char* )base + width * (j + 1))>0)//base的类型是void*,不能直接进行解引用操作或加减乘除运算
    			{
    				//先将base强制类型转换为char*,即指向一个字节的指针,加上元素个数乘以1个元素的字节宽度,此时表达式的值则指向其后第j个元素的地址
    				Swap((char*)base+width*j, (char*)base+width*(j+1), width);
    			}
    		}
    	}
    }
    void test_int()
    {
    	size_t i = 0;
    	int arr[10] = { 2,5,6,8,9,3,4,0,1,7 };
    	size_t num = sizeof(arr) / sizeof(arr[0]);
    	size_t width = sizeof(arr[0]);
    	My_qsort(arr, num, width, int_cmp);//传函数名cmp,用一个函数指针接收
    	for (i = 0; i < num; i++)
    	{
    		printf("%d ", arr[i]);
    	}
    }
    void test_struct()
    {
    	struct stu stu[4] = { {"zhangsan",1007,98.6},{"lisi",1024,87.9},{"wangwu",1002,99.7} };
    	size_t i = 0;
    	size_t num = sizeof(stu) / sizeof(stu[0]);
    	size_t width = sizeof(struct stu);
    	My_qsort(stu, num, width, struct_cmp);
    	for (i = 0; i < num; i++)
    	{
    		printf("%s ", (stu+i)->name);
    	}
    	return 0;
    }
    void main()
    {
    	test_int();
    	test_struct();
    	system("pause");
    	return 0;
    }
    

    九、运行结果
    在这里插入图片描述

    展开全文
  • 冒泡排序法,从小到大排序,对输入的数字排序,你也可以修改原程序,此程序很简单。
  • #define _CRT_SECURE_NO_WARNINGS 1 #include  #include  int main() {  int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };  int len = sizeof(arr)/sizeof(arr[0]);  int i = 0;...
  • C语言编写冒泡,选择,插入三种排序法进行数据的排序,并要求所需排序的数据从文件(.text)输入 在使用文件前必须打开文件;用函数 fopen() 打开文件 文件的打开方式: 字符 含义 “r” 以只读方式打开...
  • 程序:不妨按从小到大排序#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...
  • 创建txt文件并且输入数字 刚开始的时候创建的文件一直无法被读取,运行程序时没有语法错误但一直输出“open file error”,经过多次修改代码却一直没有得到改变后,我意识到可能是程序与该文件不在同一目录...编写排...
  • c语言编写排序算法

    2010-06-01 14:30:57
    ("1--插入排序。\n"); ("2--快速排序。\n"); ("3--选择排序。\n"); ("4--冒泡排序。\n"); ("5--堆排序。\n"); ("6--归并排序。\n");
  • c语言冒泡排序

    2020-03-19 15:16:28
    =10)个整数,将它们从小到大排序后输出,要求编写函数bubble()实现冒泡排序算法。 函数接口定义: void bubble (int a[ ], int n); 其中 a为数组,n为数据个数。 裁判测试程序样例: #include <stdio.h> void...
  • C语言 冒泡排序

    千次阅读 2018-04-08 20:17:35
    算法中排序是十分重要的,...看过循环后去尝试编写了一个关于十个整数的排序问题。在这个过程中真的是错误百出。结论就是永远不要眼高手低,要脚踏实地的敲代码,改bug,发现错误,并不断改正。 以下所缩写的代码。...
  • C语言冒泡排序算法 int main() { int ty = 0; int num[6] = { 4,65,11,23,7,3 }; int len = sizeof(num) / sizeof(int);//计算数组长度 //显示长度 printf("数组长度为:%d \n", len); printf("遍历数组:\n...
  • 编写冒泡程序,写出最好情况与最坏情况下的时间复杂度 // 编写冒泡程序,使用动态数组的创建 # include <stdio.h> # include <stdlib.h> int main() { ... 冒泡排序的思想就是每两个元素之
  • 冒泡排序:void Bubblesort(int *arr, int sz)//冒泡排序 { for (int j = sz - 1; j &gt;= 0; j--)//控制趟数 { for (int i = 0; i+1 &lt;= j; i++)//控制每趟多少次 { if (arr[i] &gt; arr[i...
  • 这一个原创C语言编写的数组大小排序法,包括插入法和冒泡法.通过学习它的思想,把握这两种基本的算法,达到举一反三的效果。

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 221
精华内容 88
关键字:

c语言编写冒泡排序

c语言 订阅