1. 氣泡排序
(1)演算法思想:將序列中的第乙個元素和第二個元素相比較,如前者大於後者,則交換,否則不交換;再將第二個元素和第三個元素比較,若前者大於後者,則交換兩個元素的位置,否則不交換,依次進行,直到最後乙個元素,經過如此一輪,則n個元素中最大的乙個被放在了最後。此後,再進行相同的過程。
(2)基本實現:
void bubblesort(datatype* arr, int sz)
} }}
(3)演算法效能:
時間複雜度:o(n^2);
空間複雜度:o (1);
穩定性:穩定
2. 快速排序
(1)演算法思想:快速排序的平均時間效能最快。任選序列中的乙個資料元素(通常選取第乙個資料元素或者最後乙個資料元素)作為樞軸,用它和所有剩餘資料元素進行比較,將所有較它小的元素排在它前面,將所有比它大的元素排在它後面,經過一趟排序後,可按此元素所在位置為界,將序列劃分為兩個部分,再重複此過程。
(2)基本實現:
hare演算法:
}挖坑演算法:
}兩指標演算法:
size_t pation3(datatype* arr, int left, int right)
while (cur < sz)
cur++;
} if (++pre != right)
return pre;
}
(3)演算法效能:
時間複雜度:o(n logn);
空間複雜度:o (logn);
穩定性:不穩定
在上面取樞軸的過程中,以最後乙個元素為基準,這樣在一般情況情況下是適用的,但是對於有序的序列來說,效率就比較低了,此時我們可以利用三數取中法來選取樞軸。
int getmiddata(datatype* arr, int left, int right)
else
}
交換排序 氣泡排序 和 快速排序
通過對比大小交換對比的元素所得到的排序為交換排序。冒牌排序時很常見的 通過對比相鄰元素的大小如果前面的元素比後面的大,則交換兩個元素,使得大的元素往後移。一 氣泡排序 二 快速排序,本文重點 快速排序在一次排序中有兩個方向,乙個是從尾部向前 逆向 乙個是從首部標誌 不包括首部標誌 向後 正向 正向和...
交換排序 氣泡排序和快速排序
1 氣泡排序演算法思想及實現 這是最原始,也是眾所周知的最慢的演算法了。基本思想 按待排序序列的先後順序,依次比較相鄰的兩個數,將小數放在前面,大數放在後面 若二者是公升序,則不作任何操作,否則交換兩個數即可 即在第一趟 首先比較第1個數和第2個數,將小數放前面,大數放後面。然後比較第2個數和第3個...
交換排序 氣泡排序和快速排序
這裡的測試資料來自於之前自己隨便寫的生成器 include using namespace std intmain int t 10,arr 20 while t return0 氣泡排序 void bubblesort int arr,int n if flag 0 return 氣泡排序 空間複...