请看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吧,其实都一样就是比较时换成不同的符号而已。
人就像是被蒙着眼推磨的驴子,生活就像一条鞭子;当鞭子抽到你背上时,你就只能一直往前走,虽然连你也不知道要走到什么时候为止,便一直这么坚持着。