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 =;
  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')
  22. {
  23. ptstr[ct] = input[ct]; //设置指针指向字符串
  24. ct++;
  25. }
  26. stsrt(ptstr,ct); //字符串排序函数
  27. puts("\nHere's the sorted list:\n");
  28. for (k=;k<ct;k++)
  29. puts(ptstr[k]);
  30. return ;
  31. }
  32.  
  33. void stsrt(char *strings [], int num)
  34. {
  35. char *temp;
  36. int top,seek;
  37.  
  38. for(top=;top <num -;top++)
  39. for(seek=top+;seek<num;seek++)
  40. if(strcmp(strings[top],strings[seek])>)
  41. {
  42. temp = strings[top];
  43. strings[top] = strings[seek];
  44. strings[seek] = temp;
  45. }
  46. }
  47.  
  48. char * s_gets(char * st, int n)
  49. {
  50. char * ret_val;
  51. int i=;
  52.  
  53. ret_val = fgets(st, n, stdin); //读取成功,返回一个指针,指向输入字符串的首字符;
  54. if(ret_val)
  55. {
  56. while(st[i]!='\n' && st[i]!='\0')
  57. i++;
  58. if(st[i] =='\n') //fgets会把换行符也吃进来了,fgets会在末尾自动加上\0;
  59. st[i]='\0';
  60. else //其实是'\0'
  61. while(getchar() != '\n') //会把缓冲区后续的字符都清空
  62. continue;
  63. }
  64. return ret_val;
  65. }

程序解读:

这个程序的好处是利用字符串指针数组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. 部署和调优 1.9 samba 部署和优化-3

    实践2 要求:共享一个目录,使用用户名和密码登录后才可以访问,要求可以读写 打开配置文件 vim /etc/samba/smb.conf 改为security = user 在最后面增加一段 [den ...

  2. Excel向数据库插入数据(执行一次只需连接一次)-batch简单使用

    由于前端时间向数据库插入excel中的数据时,每插入一条数据,就得连接一次数据库:后来发现这种做法不好,如果excel中有很多条数据,就得连接很多次数据库,这样就很浪费资源而且不安全,有时数据库也会报 ...

  3. apaache php 日记设计

    有个客户服务器是用apache搭建的,最近总是感觉站很慢,服务器很慢很卡,有时候甚至网 站都打不开,后来经过排查分析原来是里面的access.log和error.log这两个文件要经常上去看,和清理, ...

  4. EZOJ #77

    传送门 分析 一个比较神奇的思路 我们考虑分治,对于每一个区间[le,ri]我们计算这个区间中左端点属于[le,mid],右端点属于[mid+1,ri]的情况对答案的贡献 我们求左半个区间的最大最小值 ...

  5. JAVA隐藏鼠标的方法

    JAVA隐藏鼠标的方法 2012年06月03日 19:13:21 阅读数:2436 JAVA隐藏鼠标光标,可以有2种方法. 都是通过如下语句重新设置光标 Toolkit.getDefaultToolk ...

  6. JavaWeb_内省(Instrospector)

    内省是什么? 开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都是用反射技术完成此类操作过于麻烦,所以sun公司开发了一套API,专门用于操作Java对象的属性. 什么是Java对象的 ...

  7. 【Android学习】Merge 优化布局

      <merge />标签用于减少View树的层次来优化Android的布局   新建项目,不需要改动   运行后使用“DDMS -> Dump View Hierarchy for ...

  8. 【Android小技巧】android 按键如何能自动触发点击

    使用button.performClick();方法 EditText 中hint的字体跟 textSize的字体大小一样大

  9. web 后台打印

    //提交打印 function sbumitPrint() { printHidden("AppsDSPrintDoub.aspx?type=print"); } function ...

  10. Java50道经典习题-程序28 排序算法

    题目:对10个数进行排序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个进行比较,并进行交换. public class Prog28 { ...