十大排序演算法詳解
氣泡排序:挨個挨個去比較
時間複雜度:o(n^2)
空間複雜度:o(1)
演算法穩定性:穩定
原理:從陣列的第乙個位置開始兩兩比較arr[j]和arr[j+1],
如果arr[j]大於arr[j+1]則交換他兩個的位置,直到陣列結束;
從陣列的第乙個位置開始,重複上面的動作,止到陣列長度減乙個位置結束;
從陣列的第乙個位置開始,重複上面的動作,止到陣列長度減二個位置結束;
例:4 1 5 12 0
第一趟:1 4 5 0 12 i=0 j<4
第二趟:1 4 0 5 12 i=1 j<3
第三趟:1 0 4 5 12 i=2 j<2
第四趟:0 1 4 5 12 i=3 j<1
//下沉 } if (!swap)//swap==false沒有交換 }}void bubble_sort1(int *arr, int len)//上浮 } if(!swap) }}void bubble_sort2(int *arr, int len)//不開闢tmp } }}
void
swap
(int
*a,int
*b)//o(n^2) o(1) 穩定
void
bubblesort
(int
*arr,
int len)}if
(!flag)
}}n個記錄的檔案的直接選擇排序可經過n-1趟直接選擇排序得到有序結果。
直接選擇排序和直接插入排序類似,都將資料分為有序區和無序區,所不同的是直接插入排序是將無序區的第乙個元素直接插入到有序區以形成乙個更大的有序區,而直接選擇排序是從無序區選擇乙個最小的元素直接放到有序區的最後。
直接選擇排序演算法的核心
確定待排序的資料r[0…n]
確定需比較的資料r[i…n]
每次找出最小值,進行交換
直接選擇排序演算法的示例給定一組資料[8 3 2 5]
第一次交換 82
2 3 8 5
第二次交換 33
2 3 8 5
第三次交換 85
2 3 5 8
程式1
// o(n^2) o(1) 不穩定
void
selectsort
(int
*arr,
int len)}if
(min != i)
}}
程式2
void
selectsort
(int
*arr,
int len)
} temp = arr[i]
;// 交換
arr[i]
= arr[imin]
; arr[imin]
= temp;
}}
void
show
(int
*arr,
int len)
cout << endl;
}void
swap
(int
*bp,
int*ap)
//氣泡排序法
void
bobblesort
(int
*arr,
int len)
flag =0;
}if(flag)}}
//選擇排序法
//o(n^2) o(1) 如果產生跳躍式的交換則不穩定
void
selectsort
(int
*arr,
int len)}if
(min!= i)}}
//插入排序法
//時間複雜度o(n^2) 空間複雜度o(1) 穩定 資料越有序,效率越高
void
insertsort
(int
*arr,
int len)
arr[j +1]
= tmp;}}
void
insertsort2
(int
*arr,
int len)
arr[j +1]
= tmp;}}
//希爾排序 分組排序----資料趨近於有序
void
shell
(int
*arr,
int len,
int t)
arr[j + t]
= tmp;}}
//希爾排序 分組排序----資料趨近於有序
//o(n^1.3--n^1.5) o(1) 不穩定
void
shellsort
(int
*arr,
int len)
;for
(int i =
0; i <
sizeof
(d)/
sizeof
(d[0])
; i++)}
intmain()
;int len =
sizeof
(arr)
/sizeof
(arr[0]
);show
(arr, len)
;//bobblesort(arr, len);
//selectsort(arr, len);
//insertsort(arr, len);
//insertsort2(arr, len);
shellsort
(arr, len)
;show
(arr,len)
;return0;
}
選擇排序,氣泡排序,雙向氣泡排序
氣泡排序和選擇排序是最基本的排序方式,要掌握。氣泡排序重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。選擇排序每一趟從待排序的 資料元素 中選出最小 或最大 的乙個元素,順序放在已排好序的數列的...
選擇排序,氣泡排序,雙向氣泡排序
首先是選擇排序,原理 1 找到未排序的數中最小的數放到最前面 2 陣列後移一位 3 重複上面兩部。void selectsorting if min a i swap b i b t 這個應該是我第乙個接觸到的排序演算法,結果第一次打排序水題直接上冒泡,直接接了一發tle 才知道有nlogn的演算法...
氣泡排序 選擇排序
這兩個排序的演算法 都是我從乙個叫太陽落雨的部落格上找來的,我放到我自己部落格,也只是為了把兩個排序演算法放一起方便,順便自己記憶,沒有抄襲的意思。一 演算法思想 氣泡排序便是指把陣列中的乙個數與其下乙個數進行比較,小的往前挪乙個位置,進行幾趟比較得到最終結果。而插入排序便是指先把第乙個數定為最小數...