三種簡單排序
時間複雜度 o(n²)
空間複雜度 o(1)
氣泡排序的基本思想是通過比較兩個相鄰的記錄之間的比較和交換,使關鍵碼比較小的繼續逐漸從底部移向頂部(上公升),關鍵碼比較大的逐漸從頂部移向底部(沉底),冒泡由此得名。
演算法思想:
設有a[1]~a[n]的n個資料,氣泡排序的過程可以描述為:1、首先將相鄰的a[1]和a[2]進行比較,如果a[1]的值大於a[2]的值,則交換兩者的位置,使得較小的數上浮,較大的數下沉;接著比較a[2]和a[3],同樣使較小的上浮,較大的下沉。依次類推,直到比較完a[n-1]和a[n]後,a[n]為具有最大關鍵碼的元素,稱為第一趟排序結束。
2、然後再a[1]~a[n-1]區間內,進行第二趟排序,使剩餘元素中關鍵碼最大的元素下沉到a[n-1]。重複進行n-1趟後,整個排序過程結束。
void bubblesort(int
array,int num)
}
時間複雜度 o(n²)
空間複雜度 o(1)
選擇排序的基本思想是第i趟排序通過n-i次關鍵碼的比較,從n-i+1個記錄中選出關鍵碼最小的記錄,並和第i個記錄進行交換。
演算法思想:
設有a[1]~a[n]的n個資料,選擇排序的過程可以描述為:1、首先在a[1]~a[n]區間內進行比較,從n個記錄中選擇最小的記錄a[k],若k不為1則將a[1]和a[k]交換,a[1]為具有最小關鍵碼的元素,成為第一趟排序結束。
2、然後再a[i]~a[n]區間內,進行第i趟排序,從n-i+1個記錄中選出最小的記錄a[k],若k不為i則將a[i]和a[k]交換。重複進行n-1趟後,整個排序過程結束。
void selectionsort(int
array,int num)
}
}
時間複雜度 o(n²)
空間複雜度 o(1)
插入排序的基本思想是把新插入記錄的關鍵碼與已經排好序的各記錄關鍵逐個比較(這裡從後往前比較,也可以從前往後),當找到第乙個比新紀錄關鍵碼小的記錄時,該記錄之後即為插入位置k。然後從序列最後乙個記錄開始到該記錄之後的乙個元素,逐個後移乙個單元,將新記錄插入k位置。如果新紀錄的關鍵碼比序列中所有的記錄都大,則插入到最後的位置。
演算法思想:
設有a[1]~a[n]的n個資料,插入排序的過程可以描述為:1、已排好序列首先為a[1]。
2、然後將a[2]~a[n]逐個插入序列中,進行第i趟排序。將a[i]與a[1]~a[i-1]關鍵碼進行比較,若找到a[k]比a[i]大,則a[k]~a[i-1]逐個後移乙個單元,將a[i]插入到k位置;若a[i]比所有的元素都大,則什麼也不做。重複進行n-1趟排序後,整個排序過程結束。
void insertionsort(int
array,int num)
a[k+1] = temp;
}
}
最後附上排序演算法的穩定性比較,來自網路:
選擇 插入 氣泡排序
選擇 插入 氣泡排序 說明 選擇排序 selection sort 插入排序 insertion sort 與氣泡排序 bubble sort 這三個排序方式是初學排序所必須知道的三個基本排序方式,它們由於速度不快而不實用 平均與最快的時間複雜度都是o n2 然而它們排序的方式確是值得觀察與 的。解...
選擇 插入 氣泡排序
size medium 選擇排序 將要排序的物件分作兩部份,乙個是已排序的,乙個是未排序的,從後端未排序部份選擇乙個最小值,並放入前端已排序部份的最後乙個,例如 排序前 70 80 31 37 10 1 48 60 33 80 1.1 80 31 37 10 70 48 60 33 80 選出最小值...
排序 冒泡 選擇 插入
氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。1.比較相鄰的元素。如果第乙個比第二個大,...