精华内容
下载资源
问答
  • 1 //读入字符串,并排序字符串 2 #include <stdio.h> 3 #include <string.h> 4 #define SIZE 81 5 #define LIM 20 6 #define HALT "" 7 8 void stsrt(char * strings [], int num); //...

     

     1 //读入字符串,并排序字符串
     2 #include <stdio.h>
     3 #include <string.h>
     4 #define SIZE 81
     5 #define LIM 20
     6 #define HALT ""
     7 
     8 void stsrt(char * strings [], int num); //字符串排序函数
     9 char * s_gets(char * st,int n);
    10 
    11 int main(void)
    12 {
    13     char input[LIM][SIZE];
    14     char *ptstr[LIM];
    15     int ct =0;
    16     int k;
    17 
    18     printf("Input up to %d lines,and I will sort them.\n",LIM);
    19     printf("To stop,press the Enter key at a line's start.\n");
    20 
    21     while(ct<LIM && s_gets(input[ct],SIZE)!= NULL && input[ct][0]!='\0')
    22     {
    23         ptstr[ct] = input[ct]; //设置指针指向字符串
    24         ct++;
    25     }
    26     stsrt(ptstr,ct); //字符串排序函数
    27     puts("\nHere's the sorted list:\n");
    28     for (k=0;k<ct;k++)
    29         puts(ptstr[k]);
    30     return 0;
    31 }
    32 
    33 void stsrt(char *strings [], int num)
    34 {
    35     char *temp;
    36     int top,seek;
    37 
    38     for(top=0;top <num -1;top++)
    39         for(seek=top+1;seek<num;seek++)
    40             if(strcmp(strings[top],strings[seek])>0)
    41             {
    42                 temp = strings[top];
    43                 strings[top] = strings[seek];
    44                 strings[seek] = temp;
    45             }
    46 }
    47 
    48 
    49 
    50 char * s_gets(char * st, int n)
    51 {
    52     char * ret_val;
    53     int i=0;
    54 
    55     ret_val = fgets(st, n, stdin); //读取成功,返回一个指针,指向输入字符串的首字符;
    56     if(ret_val)
    57     {
    58         while(st[i]!='\n' && st[i]!='\0')
    59             i++;
    60         if(st[i] =='\n') //fgets会把换行符也吃进来了,fgets会在末尾自动加上\0;
    61             st[i]='\0';
    62         else   //其实是'\0'
    63             while(getchar() != '\n')  //会把缓冲区后续的字符都清空
    64                 continue;
    65     }
    66     return ret_val;
    67 }

    程序解读:

    这个程序的好处是利用字符串指针数组ptstr进行排序,并未改变input,这样也保留了input数组中的原始顺序。这样的做法比直接用strcpy()交换两个input字符串要简单得多。

    程序中还出现了,选择排序算法:(selection sort algorithm):其实就是以strcmp函数为基础来冒泡排序指针

    C库中有更高级的排序函数:qsort(),该函数使用一个指向函数的指针进行排序比较。

     

    转载于:https://www.cnblogs.com/grooovvve/p/9938394.html

    展开全文
  • C语言:万能排序(函数指针的运用)(代码皆在linux下gcc编译) 我们在学习一门语言时,最为普遍的就应该属实现排序的功能了,但是一旦要比较的参数类型发生了变化,我们就得重写一个排序,这样子很麻烦,效率也不高,...

    C语言:万能排序(函数指针的运用)(代码皆在linux下gcc编译)

    我们在学习一门语言时,最为普遍的就应该属实现排序的功能了,但是一旦要比较的参数类型发生了变化,我们就得重写一个排序,这样子很麻烦,效率也不高,所以一个万能的排序函数在此时就体现出了用处和它的方便之处;

    函数定义

    void sort(void *base,size_t nmemb,size_t size,int (*compare)(const void *,const void *));
    

    形参列表:
    base: 数据元素的起始地址
    nmemb:数据元素的个数
    size: 每个元素的字节大小
    compare: 比较函数 即数据元素的大小可以根据该函数进行比较(此处传入一个函数指针)

    (在c语言中,函数中void类型为万能类型)
    函数实现

    void sort(void *base,size_t nmemb,size_t size,int (*compare)(const void *,const void *)){
             char *pbase = base;
            char *temp = malloc(size);
            int i,j;
            for(i = 1;i<nmemb;i++){
                    for(j = i-1;j>=0&&compare((pbase+j*size),(pbase+(j+1)*size))>0;j--){
                            memcpy(temp,pbase + (j+1)*size,size);
                            memcpy(pbase+(j+1)*size,pbase+j*size,size);
                            memcpy(pbase+j*size,temp,size);
                    }
            }
    }
    
    

    实现思路:
    char *pbase 将void 类型转化为char类型(因为char类型为一个字节的类型),定义 temp暂存数据,从首地址开始,按元素大小选中元素进行插入排序

    实现效果
    在这里插入图片描述

    在这里插入图片描述
    successful!

    展开全文
  • C语言指针排序

    2021-01-08 22:01:14
    题目概述:指针法排列数字顺序 编程: #include<stdio.h> int main() { void sort(int x[],int n); int i,*p,a[10]; p=a; printf(“input 10 numbers:”); for(i=0;i<10;i++) scanf("%d",p++); p=a; sort(p...

    题目概述:指针法排列数字顺序
    编程:
    #include<stdio.h>
    int main()
    {
    void sort(int x[],int n); //sort函数声明
    int i,*p,a[10];
    p=a; //指针变量p指向a[0]
    printf(“input 10 numbers:”);
    for(i=0;i<10;i++)
    scanf("%d",p++);
    p=a; //指针变量p重新指向a[0]
    sort(p,10); //调用sort函数
    for(p=a,i=0;i<10;i++)
    {
    printf("%d",*p); //输出排序后的10个数
    p++;
    }
    printf("\n");
    return 0;
    }
    void sort(int x[],int n) //定义sort函数,x是形参数名
    {
    int i,j,k,t;
    for(i=0;i<n-1;i++)
    {
    k=i;
    for(j=i+1;j<n;j++)
    if(x[j]>x[k]) k=j;
    if(k!=i)
    {
    t=x[i];
    x[i]=x[k];
    x[k]=t;
    }
    }
    }
    上机实践:
    在这里插入图片描述

    展开全文
  • 关于C语言数组利用指针排序的问题

    千次阅读 2015-08-06 23:41:01
    下面是利用时间做为随机数的种子生成一个数组,然后利用指针进行排序,结果出现了想不到的错误,错误的代码如下:#include #include #include #define N 10 void sort(int *); int main() { time_t ts; //...
    下面是利用时间做为随机数的种子生成一个数组,然后利用指针进行排序,结果出现了想不到的错误,错误的代码如下:
    #include<stdio.h> 
    #include<stdlib.h>
    #include<time.h>
    #define N 10
    void sort(int *);
    
    int main()
    {
    	
    	time_t ts;						//时间数据类型
    	unsigned int num = time(&ts);	//获取时间,转换为整数
    	srand(num);						//初始化随机种子 
    	int a[N];
    	for(int i=0;i<N;i++) 
    	{
    		a[i] = rand() % 100;
    		printf("%d\t%d\n",i,a[i]);
    	}
    	
    	sort(a);
    	printf("排序后的数据:\n") ;
    	
    	for(int j=0;j<N;j++)
    	{
    		printf("%d\t%d\n",j,a[j]);
    	}
    	system("pause");
    	
    }
    
    void sort(int a[])
    {
    	int * temp;
    	for(int i=0;i<N-1;i++)
    	{
    		a[i];
    		for(int j=0;j<N-i;j++) 
    		{
    	
    			if(*(a+j) > *(a+j+1))
    			{
    				temp = &a[j];
    			<span style="white-space:pre">	</span>*temp = *(a+j);
    				*(a+j) = *(a+j+1);
    				*(a+j+1) = temp; 
    			
    			}
    			
    		
    		} 
    	
    	
    	}
    	
    
    }

    而上面的代码错误出现在:

    void sort(int a[])
    {
    	int * temp;
    	for(int i=0;i<N-1;i++)
    	{
    		a[i];
    		for(int j=0;j<N-i;j++) 
    		{
    	
    			if(*(a+j) > *(a+j+1))
    			{
    				temp = &a[j];
    				*temp = *(a+j);
    				*(a+j) = *(a+j+1);
    				*(a+j+1) = temp; 
    			
    			}
    			
    		
    		} 
    	
    	
    	}
    	
    
    }
    正确的应该代码:
    void sort(int a[])
    {
    	int temp;
    	for(int i=0;i<N-1;i++)
    	{
    		a[i];
    		for(int j=0;j<N-i;j++) 
    		{
    			if(*(a+j) > *(a+j+1))
    			{
    				temp = *(a+j);
    				*(a+j) = *(a+j+1);
    				*(a+j+1) = temp; 
    			}
    			
    		
    		} 
    	
    	
    	}
    	
    
    }

    展开全文
  • //通过形参传回调用函数,对传送回来的三个数进行从小到大的排序 #include<stdio.h> void swap(int *p1,int *p2) { int p; p=*p1; *p1=*p2; *p2=p; } int main() { int a1,a2,a3; int *p1,*p2,*p3; ...
  • C语言指针版冒泡排序算法

    千次阅读 2020-03-25 17:41:28
    冒泡排序的基本思想:如果要对n个数进行排序就需要进行n-1次比较,在第一轮比较中要进行n-1次两两比较,在第j轮中进行n-j次两两比较。 算法解释请看代码注释: #include<stdio.h> #include<string.h> #...
  • C语言指针实现冒泡排序代码 代码 int main() { int* p; int arry1[10] = {11,41,61,71,31,51,81,10,91,21}; p = arry1; selectSort(p, 10); return 0; } void selectSort(int* p, int n) { int tmp; for (int i = 0;...
  • C语言用函数指针实现数组排序

    千次阅读 2020-04-08 14:29:44
    最近看C语言有点烦,无论是自学的数据结构还是学校的指针课程,看着头都大了。 学校在PTA安排了此题,提交了多次总是报错,今天重新整理一遍且不按题目编程提示来写,提交终于正确。 (其实是最后一个数字不能有空格...
  • c语言指针实现快速排序

    千次阅读 2016-11-19 16:56:12
    printf("请输入待排序的数列: \n"); for(i =0;i;i++) { scanf("%d ",(Array+i)); } printf("待排序的数列是: \n"); for(i=0;i;i++) { printf("%d ",*(Array+i)); } QuickSort(Array,0,n-1); printf(...
  • printf("排序前的数组为:"); for (i = 0; i ; i++) { printf("%s ", strings[i]); } printf("\n"); change(n, strings); printf("排序后的数组为:"); for (i = 0; i ; i++) { printf("%s ", strings[i]...
  • 指针知识将一个5×5矩阵的最大值放在中心,四角按从左到右,从上到下的顺序存放最小值。 编程提示:利用打擂台法求最大值和最小值。 输入样例: 输入数据,之间用空格分隔,例如 11 12 13 14 15 21 31 66 88 23 10 ...
  • C语言实现用指向指针指针的方法对5个字符串排序并输出。解题思路:读者看着道题的时候,首先要知道什么时指针,指向指针指针应该怎么用,一般在开发中不这样用,读者要看明白,这个很锻炼思维的...
  • C语言:使用指针实现三个数排序

    千次阅读 2019-05-02 15:07:26
    运行结果如图: 自定义两个函数完成 交换函数: void swap(int* p, int* q) { ...排序函数: void exchange(int* p1, int* p2, int* p3) { if (*p1 < *p2) { swap(p1, p2); } if (*p1 &...
  • C语言指针数组实现字符串的排序 #include <stdio.h> #include <stdlib.h> #include <string.h> void sort(char *s[], int len) { int i,j; char *temp = (char *)malloc(sizeof(char) * 30)...
  • 原理就不讲了,这里用来理解指针的使用方法 代码1: #include <stdio.h> int main() { int a, b;/* 实际变量的声明 */ int* p, * q;/* 指针变量的声明 */ p = &a;/* 在指针变量中存储实际变量的地址 *...
  • C语言 | 用指针对10个数排序

    千次阅读 2020-12-12 21:54:44
    例31:C语言指针方法对10个整数按由大到小顺序排序。 解题思路:在主函数中定义数组,用来存放10个整数,定义int *型指针变量p指向a[0],定义函数sort将数组中的元素按由大到小排序排序函数: void sort(int x...
  • 前言 因为自己上几篇的博客都是牵扯到指针的,所以自己就有必要去真正理解指针的作用,在刚开始学C指针时,觉得指针这东西...今天,我就在这里将C语言中冒泡/选择/比较算法以指针的形式进行完成。 冒泡算法 //指针冒...
  • 下面这个没有用指针,直接改变原字符串数组,是用冒泡排序 也是正确的 ``` #include #include #define N 5 int main() { char ptr[N][80]={ "how ","are ","you ","i","fine" }; char temp[80]; int ...
  • 排序算法中的归并排序(Merge Sort)是利用”归并”技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。 一、实现原理: 1、算法基本思路 设两个有序的子文件(相当于输入堆)放在同一向量中相邻的...
  • c语言指针实现冒泡排序及其优化

    千次阅读 多人点赞 2017-11-19 22:01:27
    冒泡排序是一个十分容易实现的算法,简单说明一下: 假设数组长度为 N,要求从小到大排序: 1从第一个数开始比较相邻两个元素,如果前面的数据大于后面的数据,就将二个数据交换。 2对数组元素进行一次第一次遍历...
  • 题目:运用指针法实现对10个整数的排序。 #include <stdio.h> int main() { void sort(int x[],int n); int i,a[10]; int *p=a; printf("请输入10个整数:\n"); for(i=0;i<10;i++) { ...
  • 指针数组比较适合用来指向若干个字符串,使字符串处理起来更加灵活 ... 使用选择法进行排序,不移动字符串,而是改变指针数组各个元素的指向 代码如下: //对字符串排序,(冒泡排序法) #include <...
  • 2.请使用指针而不是数组下标; 3.避免使用C函数库中操作字符串的函数; 2.代码样例与解释 先给出了代码例子: #include<stdio.h> //函数声明 void reverse_string(char *str); ...
  • C语言使用指针实现选择法和冒泡法对数字排序 前言 刚学到指针章节,遇到的习题大多是将以前写过的代码用指针的方法再写一次,不过说实话,很多写起来并不是我想像的那简单,而且觉得没啥必要,但是据说到链表指针...
  • //要排序的数字个数 int count = 3; //原始数组 int arrays[100]; //用于for循环 int i; //声明函数 void sort(); printf("请输入要排序的数字的个数:"); scanf("%d", &count); //填充原始数组 for ...
  • C语言 指针方法实现三个数排序

    万次阅读 2017-12-04 22:18:58
    利用指针方法 输入 输入三个数 输出 按照从大到小的顺序输出 #include int main() {  int a,b,c;  int *pa=&a;  int *pb=&b;  int *pc=&c,t;  scanf("%d%d%d",&a,&
  • C语言基础

    万人学习 2020-01-08 14:13:00
    5)、如果要利用编程来做一些windows优化工作的话,建议还是利用C语言C语言是目前世界上流行、使用最广泛的高级程序设计语言 6、很多编译器,几乎所有操作系统Windows,Linux,Unix的大部分代码都是C,C在背后做了...
  • 使用指针遍历数组 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.使用数组下标遍历数组 数组中的每个元素都有一个序号,这个序号从 0 开始,称为下标 index,例如,a[0] ...
  • c语言学习-使用指针进行冒泡法排序 程序流程图: 代码: #include<stdio.h> void main() { int b[10],*pa; int h,k,temp; pa=&b[0]; printf("键盘输入10个字符\n"); {for(k=0;k<=9;k++) { scanf("%d",...
  • // // main.c // Pointer_array // // Created by ma c on 15/8/2. ...// 要求:使用指针指针输出字符串。首先要使用指针数组创建一个字符串数组,然后定义指向指针指针,使其指向字符串数组,并使用其...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,268
精华内容 8,907
关键字:

c语言利用指针排序

c语言 订阅