選擇排序核心思想 跟 冒泡排序差不多。
冒泡排序做得比較多無用功,而選擇排序相對較少。
選擇排序代碼如下:
#include<stdio.h>void swap(int *a,int *b){ int t; t = *a; *a = *b; *b = t;}int main(){ int a[]={5,2,3,1,4}; int i,j,min,len; len = sizeof(a)/sizeof(int); /*-----主要語句-----*/ for(i=0;i<len;i++) { min = i; for(j=i+1;j<len;j++) if(a[min]>a[j]) min = j; if(min!=i) swap(&a[i],&a[min]); } /*---------------*/ for(i=0;i<len;i++) PRintf("%d,",a[i]); return 0;} 打印結果:1,2,3,4,5由上圖可知道,選擇排序在第二層for循環中,是用 min 來記錄下較小數值的下標,一輪循環過后,min自然是最小的數值的下標,然后再做數值交換。
所以在二層for循環,一輪循環,才會做一次數值交換,而不像冒泡排序,只要是檢測到比最小的還小的數值就馬上做數值交換,而不等到整個循環結束(你怎么知道下一個會不會更小呢?)
因此冒泡排序是十分慢的算法
新聞熱點
疑難解答