呵呵,最近幾天我有個小發現,那就是老白沒有來看過我的博客了,說真的蠻希望他能來的,
他不來有點讓我失望,畢竟我也關注他很長一段時間了,當然,不管他來不來,我自己的工作還是得繼續下去的嘛中,對不對,這里我將簡單對于將n個實數由大到小排序做個介紹吧。
n個實數用數組a描述。
本例提供用選擇排序方法與冒泡排序方法分別實現n個實數由大到小排序的函數。
算法一:選擇排序。
選擇排序需反復進行求最大值與交換兩個數這兩種基本操作。
對a[o]、a[1]、…、a[n一1]由大到小排序:先求所有數的最大值,然后將最大值與a[o]進行交換;再求a[1]~a[n一1]這些數的最大值,然后將最大值與a[1]進行交換;再求a[2]~a[n一1]這些數的最大值,然后將最大值與a[2]進行交換……;最后求a[n一2]與a[n一1]這些數的最大值,然后將最大值與a[n一2]進行交換。如此,經過n一1輪處理完成排序,本文首發中國自學編程網。
程序如下:
void sortl(a,n)/*選擇排序函數*/
float a[];
int n:
{int k,i,j;/*k最大值下標,i,j循環控制變量*/
float t;/*中間變量,用于兩個數的交換*/
for(i=0;i<n-1;i++)
{k=i;/*求最大值下標*/
for(j=i+1}j<n;j++)
if(a[j]>a[k])k=j
t=a[i];a[i]一a[k];a[k]=t;/*進行交換*/
}
}
算法二:冒泡排序。
冒泡排序需反復進行相鄰兩個數的比較與交換兩個數這兩種基本操作。對相鄰的兩個數進行比較時,如果后面的數大于前面的數,將這兩個數進行交換,大的數往前冒。將所有相鄰的兩個安全閥數比較一遍,稱為一輪比較。如果進行一輪比較無交換,本文首發中國自學編程網排序完成。
有無交換用一標志變量描述,一輪比較用for循環完成,整個排序利用標志變量用條件循環控制。
程序如下:
void sort2(a,n)/*冒泡排序函數*/
float a[];
int n;
{int i;/*一輪比較的循環控制變量*/
int flag;/*標志變量,為1有交換,為0無交換*/
float t;/*中間變量,用于兩個數的交換*/
do
{flag=O;/*先假定無交換,已排好序*/
for(i=O;i<n一2; i++)
if(a[i+1]>a[i])
{t=a[i];a[i]=a[i+1];a[i+1]=t;/*進行交換*/
flag=1;/*有交換,標志變量的值改變為1*/
}
}while(flag==1);
)
由小到大排序請讀者作類似考慮。呵呵,差不多了,如果有不當之處,請朋友們指正啊---