C语言实现字符串排序---算法和程序


```c
#include <stdio.h>
#include <string.h>
#define SIZE 81
#define LIM 20
#define HALT " "

void strsort(char *strings[], int num);
char *s_gets(char *s, int n);

int main()
{
    char input[LIM][SIZE]; //用于存输入的字符串数组
    char *ptstr[LIM];      //内含指针变量的数组
    int count = 0;

    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 (count < LIM && s_gets(input[count], SIZE) != NULL && input[count][0] != '\0')
    {
        ptstr[count] = input[count]; //第count个指针指向第count个字符串
        count++;
    }
    strsort(ptstr, count); //第一个参数为字符串数组

    puts("\nHere are the sorted list:\n");
    for (int i = 0; i < count; i++)
    {
        puts(ptstr[i]);
    }

    return 0;
}

/*字符串排序算法(以数字排序为例,从小到大排序)
序号    数字(第1轮)   
0       9           首先序号为0位置的数和下面的所有数字挨个比较,小的放在序号0位置,这一轮比较后,所有数字中最小的会放在0位置
1       0           第2轮将序号1位置上的数和下面所有数字挨个比较,小的放在序号1位置上,这一轮比较后,除序号0位置的数字,其余数字中最小(所有数字中倒数第2小)的数字会放在1位置 
2       3           第3轮将序号2位置行的数字·········································································倒数第3小的数字会放在2位置上
3       4
4       1   
5       8
6       5
7       3
8       4
*/
void strsort(char *strings[], int num) //argu1是一个数组,里面是指向string的指针
                                       //通过改变指针的指向,来进行排序,strings[0]指向最小的,最靠前的
{
    char *temp;    //做个中转站的作用
    int top, seek; //定义最大值索引和种子索引
    for (top = 0; top < num - 1; top++)
    {
        for (seek = top + 1; seek < num; seek++)
        {
            if (strcmp(strings[top], strings[seek]) > 0) //strings[top]指向ASCII码更小的
            {
                temp = strings[top];
                strings[top] = strings[seek]; //挨个比较
                strings[seek] = temp;         //strings[seek]指向ASCII码较大的,之后再来下一个进行比较,谁小谁放在top
            }
        }
    }
}
char *s_gets(char *s, int n)
{
    char *ret_val;
    int i = 0;
    ret_val = fgets(s, n, stdin); //fgets正常情况下返回的地址与第一个输入参数相同
    if (ret_val != NULL)
    {
        while (s[i] != '\n' && s[i] != '\0')
        {
            i++;
        }
        if (s[i] == '\n')
        {
            s[i] = '\0';
        }
        else
        {
            while (getchar() != '\n')
            {
                continue;
            }
        }
    }
    return ret_val;
}

下面是程序输出,先手动输入一组字母—>回车—>得到排序后的结果

Input up to 20 lines, and I will sort them.
To stop, press the Enter key at a line's start.
apple
zipple
like
hello
disk
bank
english


Here are the sorted list:

apple
bank
disk
english
hello
like
zipple
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咖啡与乌龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值