C語言之排序
阿新 • • 發佈:2018-12-30
氣泡排序
兩兩比較,小的先冒泡。
void bubbling(const char* str)
{
int len=strlen(str);
int t;
int i;
for(t=1;t<len;t++) //t代表要排序幾位,注意t==1,
{
for(i=len-1;i>=t;i--) //注意 i==len-1,i>=t
{
if(str[i]>str[i+1])
{
swap(str[i],str[i+1]);
}
}
}
}
對冒泡演算法做點小優化:有時候陣列內元素基本都是排序完成的,只需改動一兩個資料,此時增加標誌位有利於提高效率。避免在已經有序的情況下,繼續無意義的迴圈。
void bubbling(const char* str) { int len=strlen(str); int t; int i; int flag; for(t=1;t<len&&(!flag);t++) //t代表要排序幾位,注意t==1, { flag=0; for(i=len-1;i>=t;i--) //注意 i==len-1,i>=t { if(str[i]>str[i+1]) { swap(str[i],str[i+1]); flag=1;//資料更換完成 } } } }
快速排序
快速排序就是 通過一次排序將待排的資料分成兩部分,再分別對這兩部分進行分成兩部分的操作,直到剩下一個資料。
這篇文章寫的很好!
int quick_sort(char* str,int left,int right) { int left_temp; int right_temp; int temp; int cup; left_temp=left; right_temp=right; temp=str[left]; //以最左邊的數為基準數此時需要從右邊開始找起。 while(left_tmep!=right_temp) { while(str[right_temp]>=temp&&(right_temp>left_temp)) right_temp--; while(str[left_temp]<=temp&&(right_temp>left_temp)) left_temp--; if(left_temp<right_temp) { cup=str[right_temp]; str[right_temp]=str[left_temp]; str[left_temp]=cup; } } //將基準數歸位 str[left]=str[left_temp]; str[left_temp]=temp; quick_sort(str,left,left_temp-1); quick_sort(str,left_temp+1,right); }