【冒泡排序】
int i, j, temp; for (j = 0; j < len - 1; j++) { for (i = 0; i < len - 1 - j; i++) if (a[i] > a[i + 1]) { temp = a[i]; a[i] = a[i + 1]; a[i + 1] = temp; } }
过程图:https://blog.csdn.net/lu_1079776757/article/details/80459370
以下写法都对:
int i, j, temp; for (i = 0; i< len ; j++) { for (j = i+1; i < len; i++) if (a[i] > a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } }
int i, j, temp; for (i = 0; i < len ; j++) { for (j = len-2; i >=j; j--) if (a[j] > a[j + 1]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } }
int i, j, temp; for (i = 0; i < len;i++) { for (j = 1; j < len - i; j++) if (a[j-1] > a[j]) { temp = a[j]; a[j] = a[j-1]; a[j-1] = temp; } }
int i, j, temp; for (i = len-1; i < 0; i--) { for (j = 0; j < i; j++) if (a[j] > a[j + 1]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } }
大学老师批作业的时候该多发愁啊。
【选择排序】
#include<stdlib.h> #include<string.h> #include<math.h> int main(int argc, char* argv[]) { int a[]={4,3,5,2,6,1}; int temp,min; int len=sizeof(a)/sizeof(int); //printf("len=%d ",len); int i,j,k; for(i=0;i<len-1;i++){ min=i; for(j=i+1;j<len;j++){ if(a[j]<a[min]){ min=j; } } if(min!=i){ temp=a[min]; a[min]=a[i]; a[i]=temp; /* for(k=0;k<len;k++){ printf("%d ",a[k]); } printf(" "); */ } } return 0; }
if(min!=i)放在里面也对,不过交换次数超级多。
#include<stdlib.h> #include<string.h> #include<math.h> int main(int argc, char* argv[]) { int a[]={6,5,4,3,2,1}; int temp,min; int len=sizeof(a)/sizeof(int); //printf("len=%d ",len); int i,j,k; for(i=0;i<len-1;i++){ min=i; for(j=i+1;j<len;j++){ if(a[j]<a[min]){ min=j; } if(min!=i){ temp=a[min]; a[min]=a[i]; a[i]=temp; } /* for(k=0;k<len;k++){ printf("%d ",a[k]); } printf(" "); */ } } return 0; }