利用指针排序与选择排序算法

 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

时间: 2024-10-09 02:21:15

利用指针排序与选择排序算法的相关文章

【排序】选择排序算法

特别说明 对于算法,重在理解其思想.解决问题的方法,思路.因此,以下内容全都假定待排序序列的存储结构为:顺序存储结构. 选择排序思想 选择排序又称为简单选择排序,主要思想描述如下: 01.假设待排序列表为 .选择排序将  划分为由已排序好序的  部分 以及 未排序的  部分: 注意:刚开始时  部分其实可认为只有一个元素,即: 元素 02.每次从  部分中选出最小(或最大)的那个元素,将其放在  的末尾位置: 03.重复02步骤,直到  部分为空为止: 编码参考 简单选择排序是非常简单的一种排序

排序算法6--选择排序--简单选择排序

简单选择排序 简单选择排序属于选择排序, 选择排序的思想是:每一趟从待排序的记录中选出关键字最小的记录,按顺序放在以排序的记录序列的后面,知道全部排完为止. 1.简单选择排序法是每次循环找出最值,循环结束后将最值调整到合适位置,交换的次数少. 每次找出当前无序队列中的最小的元素与第一个交换位置,再选择第二小的与第二个交换位置 原始队列:   3 5 6 2 4 1(最小元素1与3交换) 第一步: 1 5 6 2 4 3 (当前最小元素2与5交换) 第二步: 1 2 6 5 4 3 (当前最小元素

算法基础之排序(2)--选择排序 改进

1 /********************************************************************************************************** 2 * Function : test 3 * Create Date : 2014/03/23 4 * Author : NTSK13 5 * Email : [email protected] 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性

基础算法之排序(2)--选择排序

1 /********************************************************************************************************** 2 * Function : test 3 * Create Date : 2014/03/23 4 * Author : NTSK13 5 * Email : [email protected] 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性

简单排序之选择排序算法JAVA实现

选择排序原理 选择排序是一种简单排序算法.这是一个基于位置比较的算法,通常实现是左边是已经排好序的元素列表,右边是待排序的元素.当然,一开始的时候,我们认为都是未经排序的. 选择排序的精髓:与冒泡排序不同,选择排序是第N趟排序先确定最小元素的位置,然后和第N个元素交换位置.主要特点是每一趟选择一个最小值的索引作为梅一堂最后交换的位置.以一个元素个数为N的整形数组arr为例: 第一趟 以第一个元素arr[0]为基准,准备好一个中间变量temp用来记录该趟最小元素的位置,一开始,temp=0,比较a

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

基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. 简单选择排序的示例: 操作方法: 第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换: 第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换: 以此类推..... 第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与

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

选择排序的基本思想: 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 我的通俗解释: ①第一遍先在整个序列中寻找到最小值,将其移到首位,序列被分为1,n-1; ②继续在n-1中寻找最小值,将其移到n-1的首位,也就是整个序列的第二位 ③以此类推,反复操作步骤②,得到结果 选择排序的主要优

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

基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. 简单选择排序的示例: 操作方法: 第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换: 第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换: 以此类推..... 第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与

选择排序——直接选择排序

选择排序 每一趟从待排序的元素中,选出最小的元素,放到已经排好序的序列的后面直到全部元素排序完毕.在这个过程中,有序区逐步扩大,而无序区逐渐缩小. 直接选择排序 直接选择排序是将无序区内的最小元素追加到有序区的后面,从而扩大有序区的范围.而我们又是在原地排序,所有也就相当与交换无序区的第一个元素和无序区最小元素的位置. 我们需要一个游标来追踪无序区的最小元素. 假设为 K , 我们又同时假设每一趟排序前,无序区的第一个元素就是当前无序区的最小元素. 也就是说 k 在每一次排序开始时,都是指向无序

选择排序--------简单选择排序

基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. 操作方法: 第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换: 第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换: 以此类推..... 第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与第i 个记录交换, 直