//读入字符串,并排序字符串
#include <stdio.h>
#include <string.h>
#define SIZE 81
#define LIM 20
#define HALT "" void stsrt(char * strings [], int num); //字符串排序函数
char * s_gets(char * st,int n); int main(void)
{
char input[LIM][SIZE];
char *ptstr[LIM];
int ct =;
int k; printf("Input up to %d lines,and I will sort them.\n",LIM);
printf("To stop,press the Enter key at a line's start.\n"); while(ct<LIM && s_gets(input[ct],SIZE)!= NULL && input[ct][]!='\0')
{
ptstr[ct] = input[ct]; //设置指针指向字符串
ct++;
}
stsrt(ptstr,ct); //字符串排序函数
puts("\nHere's the sorted list:\n");
for (k=;k<ct;k++)
puts(ptstr[k]);
return ;
} void stsrt(char *strings [], int num)
{
char *temp;
int top,seek; for(top=;top <num -;top++)
for(seek=top+;seek<num;seek++)
if(strcmp(strings[top],strings[seek])>)
{
temp = strings[top];
strings[top] = strings[seek];
strings[seek] = temp;
}
} char * s_gets(char * st, int n)
{
char * ret_val;
int i=; ret_val = fgets(st, n, stdin); //读取成功,返回一个指针,指向输入字符串的首字符;
if(ret_val)
{
while(st[i]!='\n' && st[i]!='\0')
i++;
if(st[i] =='\n') //fgets会把换行符也吃进来了,fgets会在末尾自动加上\0;
st[i]='\0';
else //其实是'\0'
while(getchar() != '\n') //会把缓冲区后续的字符都清空
continue;
}
return ret_val;
}

程序解读:

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

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

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

C语言利用指针排序与选择排序算法的更多相关文章

  1. 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)

    本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...

  2. 选择排序—简单选择排序(Simple Selection Sort)

    基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素 ...

  3. 排序(Sort)-----选择排序

       声明:文中动画转载自https://blog.csdn.net/qq_34374664/article/details/79545940    1.选择排序简介 选择排序(Select Sort ...

  4. 选择排序—简单选择排序(Simple Selection Sort)原理以及Java实现

    基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素 ...

  5. C语言冒泡(起泡)排序与选择排序的循环条件区别

    冒泡排序(写法1): i = 0; i < n-1; ++i{ flag = true; j = 0; j < n-1-i; ++j{//从前面开始冒泡 if( arr[j] < a ...

  6. 排序(1)---------选择排序(C语言实现)

    选择排序的基本思想: 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理例如以下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素 ...

  7. ArraySort--冒泡排序、选择排序、插入排序工具类demo

    public class ArraySort { private long[] a; private int nElems; public ArraySort(int max){ a=new long ...

  8. 选择排序---直接选择排序算法(Javascript版)

    在要排序的一组数列中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个 ...

  9. 八大排序算法之三选择排序—简单选择排序(Simple Selection Sort)

    基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素 ...

随机推荐

  1. JAVA input/output 流层次关系图

    在java中,input和output流种类繁多,那么它们之间是否有关系呢?答案是肯定的,其中使用到了设计模式,装饰模式 下图来自于HEAD FIRST 设计模式 装饰模式一章 下图来自网络博客:ht ...

  2. activity状态保存的bundl对象存放位置的思考

    我们知道,当activity被异常终止时,可以把一些信息保存到bundle对象中,在下次启动时恢复. 那么,这个bundle对象是保存在哪里的呢? 这种状态保存的方法针对的是activity而不是进程 ...

  3. [转载]HTTP的无状态是什么意思?

    文章地址:https://www.cnblogs.com/bellkosmos/p/5237146.html#commentform 作者:赛艇队长 引子: 最近在好好了解http,发现对介绍http ...

  4. Entity Framework Tutorial Basics(35):Local Data

    Local Data The Local property of DBSet provides simple access to the entities that are currently bei ...

  5. Eclipse遇坑记录

    1.安装Ivy插件 插件地址:http://ant.apache.org/ivy/ivyde/download.cgi 在线安装提示成功,但是配置窗口并未显示Ivy相关配置,随后利用手动安装重启即可 ...

  6. Charles抓包https请求

    平时使用Charles抓包,http的请求一眼就看到具体的请求信息返回信息等,但是如果是https请求,则是出现<unknow>,如下图: 若想要抓取https请求,怎么办呢? 1.连接C ...

  7. 百度地图android客户端的AndroidMainfest.xml的学习和android版本号

    平时写android产品相关的东西接触比较少,于是找个例子学习下. 众所周知,Apk文件是可以反编译的,虽然看不到代码,xml还是可见的. 把百度地图android客户端反编译之后,来学习下它的And ...

  8. Transfer data to SQL Server from SPC-Light with Excel macros

    公司的QA检测软件SPC-Light,需要从其中读取一些信息至SQL Server数据库,储存或是做其它分析. 先是在Excel的VBE的工具中,引入一个组件Microsoft ActiveX Dat ...

  9. Ubuntu小记

    一. Ubuntu分区记忆 参考教程调整: 1. /boot用于安装grub,设为主分区 2. /根目录20G一般足够 3. /home剩下的给home 4. swap空间=物理内存 挂载点 大小 类 ...

  10. A Plug for UNIX UVA - 753(网络流)

    题意:n个插座,m个设备及其插头类型,k种转换器,没有转换器的情况下插头只能插到类型名称相同的插座中,问最少剩几个不匹配的设备 lrj紫书里面讲得挺好的. 先跑一遍floyd,看看插头类型a能否转换为 ...