選擇排序/氣泡排序?
阿新 • • 發佈:2018-12-23
#include<stdio.h> int max(int a[],int len) { int maxid=0; int i=1; for(;i<len;i++ ) { if(a[i]>a[maxid]) { maxid=i; } } return maxid; //return the subscript what represents the max number of a[] } int main() { int a[]={0,1,2,5,6,4,2,36,58,4,1,57,21}; int len=sizeof(a)/sizeof(a[0]); int i=len-1; for(;i>0;i--) { int maxid=max(a,i+1); //swap a[maxid],a[len-1] int t=a[maxid]; a[maxid]=a[i]; a[i]=t; // Swap the max number with the last subscript } int j=0; for(;j<len;j++) { printf("%d ",a[j]); } // printf("%d\n",maxid); return 0; }
再看另一個沒有單獨寫出函式然後呼叫的,似乎前者更好理解:
#include<stdio.h> int main(void) { int i,index,j,n,temp; int a[10]; printf("Enter n:"); scanf("%d",&n); printf("Enter %d integers:",n); for(i=0;i<n;i++) scanf("%d",&a[i]); for(j=0;j<n-1;j++) //why is it "n-1"? //Because the value whose number is "n-1" will be decided without more sorting behaviour as the value whose number is "n-2" is on the right seat. { index=j; //At first, a[index] means a[0], so i=j+1; and secondly,a[index] means a[1]… for(i=j+1;i<n;i++) //i=j+1 ensures that the last smaller value cannot be included in computing.To achive the goals of sorting. if(a[i]<a[index]) index=i; // If you want to sort this set of number by big to small, you just change "<" into ">". //To find the smallest value of the remaining values and swap it or not to take it to the right seat temp=a[index]; a[index]=a[j]; a[j]=temp; } printf("After sorted:"); for(i=0;i<n;i++) { printf("% d",a[i]); } return 0; }