请看matlab代码的排序和c语言中排序,总觉着matlab可能只剩下画图比较方便了吧

matlab代码:
 1 function outv = mysort(vec)
 2 %mysort sorts a vector using the selection sort 
 3 %Format: mysort(vector)
 4 
 5 %Loop throuth the elements in the vector to end-1
 6 for i = 1: length(vec) -1
 7     indexlow = i;
 8     for j = i + 1 : length(vec)
 9         if vec(j) < vec(indexlow)
10             indexlow = j;
11         end
12     end
13     %temp = vec(i);
14     %vec(i) = vec(indexlow);
15     %vec(indexlow) = temp;
16     swapg(vec(i), vec(indexlow))
17 end
18 outv = vec;
19 end
20 
21 function swapg(var1, var2)
22 %swapg swap var1 and var1, without use other variable
23 %Format: swapg(var1, var2)
24 
25 var1 = var1 + var2;
26 var2 = var1 - var2;
27 var1 = var1 - var2;
28 end

代码非常简单,就不多做说明了,测试的脚本内容:

vec = [85 70 100 95 80 91];
vec = mysort(vec)

结果为:

vec =
    70    80    85    91    95   100

再来看下C语言的实现吧:没有分模块,一个C源码搞定了,将就看吧:

1 /* *=+=+=+=+* *** *=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
 2   * 作者代号: *** :guochaoxxl
 3   * 版权声明: *** :(魎魍魅魑)GPL3
 4   * 联络信箱: *** :※.com
 5   * 文档用途: *** :深入理解C指针
 6   * 文档信息: *** :~/testc.c
 7   * 修订时间: *** *2022年第34周 08月26日 星期五 下午08:50 (238天)
 8   * 代码说明: *** :自行添加
 9  * *+=+=+=+=* *** *+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=*/
10 #include <stdio.h>
11 
12 int arr[] = {85, 70, 100, 95, 80, 91};
13 
14 void swap(int *var1, int *var2){
15     *var1 = *var1 + *var2;
16     *var2 = *var1 - *var2;
17     *var1 = *var1 - *var2;
18 
19     return;
20 }
21 
22 void sortS(int arr[], int size){
23     for(int i = 0; i < size - 1; i++){                                   
24         int low = i;
25         for(int j = i + 1; j < size; j++){
26             if(arr[j] < arr[low]){
27                 low = j;
28             }
29         }
30         swap(&arr[i], &arr[low]);
31     }
32 
33     return;
34 }
35 
36 void disp(int arr[], int size){
37     for(int i = 0; i < size; i++){
38         printf("%d\t", arr[i]);
39     }
40     printf("\n");
41 
42     return;
43 }
44 
45 int main(int argc, char **argv)
46 {
47     int size = sizeof(arr)/sizeof(arr[0]);
48     disp(arr, size);
49     sortS(arr, size);
50     disp(arr, size);
51 
52     return 0;
53 }

编译和测试结果:

gcc -g testc.c -o testc
./testc

85      70      100     95      80      91            //原始数据
70      80      85      91      95      100           //排序数据    

收工,终于把不用任何中间变量,实现两个变量的交换给彻底融会贯通了,哈哈哈哈。

matlab中还有一个带参数的sort函数,也一并实现了,就不再优化了,一起看看吧:

function outv = mysort(vec, ch)
%mysort sorts a vector using the selection sort 
%Format: mysort(vector)

%Loop throuth the elements in the vector to end-1
for i = 1: length(vec) -1
    indexlow = i;
    for j = i + 1 : length(vec)
        if ch == 'd'
            if vec(j) < vec(indexlow)
                indexlow = j;
            end
        elseif ch == 'a'
            if vec(j) < vec(indexlow)
                indexlow = j;
            end            
        end
    end
    %temp = vec(i);
    %vec(i) = vec(indexlow);
    %vec(indexlow) = temp;
    swapg(vec(i), vec(indexlow))
end
outv = vec;
end

function swapg(var1, var2)
%swapg swap var1 and var1, without use other variable
%Format: swapg(var1, var2)

var1 = var1 + var2;
var2 = var1 - var2;
var1 = var1 - var2;
end

如果需要升序就传入字符a,降序就传入字符d吧,其实都一样就是比较时换成不同的符号而已。

posted @ 2022-08-26 21:15  叕叒双又  阅读(58)  评论(0编辑  收藏  举报