程序阅读题中的一个问题

这是C语言程序基础中的一道试题,在这段程序中 Fsort 函数是一个是什么逻辑,我尝试阅读但是没有读懂。我自己的理解是对字符串进行排序,我预想的结果应该是”Basic,c++,Fortan,Java,pascal“,但是结果却是”Basic,Fortan,Java,C++,pascal“,请问这是为什么。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void Fsort(char* name[], int n);
void Fprintf(char* name[], int n);

void main() {



    char* name[] = { "Basic","Fortan","c++","Java","pascal" };

    int n = 5;

    Fsort(name, n);
    Fprintf(name, n);
}           
void Fsort(char* name[], int n) {

    char* temp;
    int i, j, k;
    for (i = 0; i < n - 1; i++) {

        k = i;
        for (j = i + 1; j < n; j++) 
            if (strcmp(name[k], name[j]) > 0) k = j;

            if (k != i) {

                temp = name[i];
                name[i] = name[k];
                name[k] = temp;
            }
        
    }
}

void Fprintf(char* name[], int n) {

    int i;

    for (i = 0; i < n; i++) {


        puts(name[i]);

    }

}



Fsort 函数是实现字符串排序功能,你的理解没错,你预想的结果应该是”Basic,C++,Fortan,Java,pascal“ 也没错。代码运行的结果和预想结果不同,原因是第12行代码里的那串字符串数组里 c++ 这里的 c 是小写的,而你预想的 C++ 的 C 是大写的,而字符串比较过程中,小写字符 > 大写字符,pascal 也是小写的,所以才有了这个结果:”Basic,Fortan,Java,c++,pascal“ 。

因为小写字母的ascii值比大写字母大,所以往后排。

下面是我的理解,供参考:
因为strcmp是通过ASCII码的大小来比较字符,然后代码如果检测到name数组里的字符串第一个字母ASCII码比后面的大,就交换,即实现把字符串第一个字母ASCII码按从小到大排列,实际就是先按大写字母顺序排序,再按小写字母顺序排序,因为大写字母的ASCII码比小写字母的小,所以结果就是:
Basic
Fortan
Java
c++
pascal