1.冒泡排序
冒泡排序,顧名思義,數(shù)值大的數(shù)據(jù)像從前向后冒(順序排列)。每次比較相鄰的兩個元素,如果后者比前者數(shù)值更小則交換二者的順序,依次遍歷整個數(shù)組,完成排序。

冒泡排序.gif
python實(shí)現(xiàn):
def bubble_sort(arr):
for i in range(0, len(arr)):
for j in range(0, len(arr)-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
c++實(shí)現(xiàn):
void bubble_sort(int arr[], int len){
for(int i=0;i<len-1;i++){
for(int j=0;j<len-1-i;j++){
if (arr[j]>arr[j+1])
std::swap(arr[j], arr[j+1]);
}
}
}
一個小坑
在編寫c++代碼時開始只想給bubble_sort()函數(shù)傳入一個參數(shù):數(shù)組arr[],arr的長度len試圖在函數(shù)中通過 sizeof(arr) / sizeof(arr[0]) 獲得,但是測試時始終無法正確得到數(shù)組arr的長度。獲得數(shù)組長度的正確方法:
#include<iostream>
using namespace std;
template<class T>
int length(T& arr)
{
//cout << sizeof(arr[0]) << endl;
//cout << sizeof(arr) << endl;
return sizeof(arr) / sizeof(arr[0]);
}
int main()
{
int arr[] = { 1,5,9,10,9,2 };
// 方法一
cout << "數(shù)組的長度為:" << length(arr) << endl; // 輸出結(jié)果:數(shù)組的長度為:6
// 方法二
//cout << end(arr) << endl;
//cout << begin(arr) << endl;
cout << "數(shù)組的長度為:" << end(arr)-begin(arr) << endl; // 輸出結(jié)果:數(shù)組的長度為:6
system("pause");
return 0;
}
2.選擇排序
選擇排序,首先在數(shù)組全體元素中找到最小的元素,記錄其索引,將該元素與未排序部分的首元素交換位置。剩余元素中重復(fù)該操作,即可完成排序。

選擇排序.gif
python實(shí)現(xiàn):
def selection_sort(arr):
for i in range(len(arr) - 1):
# 記錄最小數(shù)的索引
minIndex = i
for j in range(i + 1, len(arr)):
if arr[j] < arr[minIndex]:
minIndex = j
# i 不是最小數(shù)時,將 i 和最小數(shù)進(jìn)行交換
if i != minIndex:
arr[i], arr[minIndex] = arr[minIndex], arr[i]
return arr
c++實(shí)現(xiàn)
void selection_sort(int arr[], int len){
for(int i=0;i<len-1;i++){
int minindex=i;
for(int j=i+1;j<len;j++){
if (arr[minindex] > arr[j]){
minindex = j;
}
}
std::swap(arr[i], arr[minindex]);
}
}