,,
void Bubble_sort (int arr [], int 兰) { int 我; (i=0; i< len;我+ +) { int j; (j=0; j时间复杂度o (n ^ 2),空间复杂度o (1)。
2,快排:
原理:从中间向两边的探索,在序列中选择一个准基数,用来做参考的数,选择左边的第一个数为例,将序列中所有大于准基数的数放在它的右边,小于的放在它的左边,最终确定准基数的位置。
定义两个变量左,右,可以将其看作指针,指定其对应的某元素,一个指向最左边,一个指向最右边,选择离开作为准基数,从最左边的数和它比较,当准基数小于右指向的数时,正确的———如果大于右指向的数,arr(左)=arr(右),当准基数大于左边的值时,左+ +,如果小于左边的值,arr[右]=arr(左),最后将准基数放在其正确的位置,然后重复上述步骤递归。
源码:
void Quick_sort (int arr [], int 前面,int 回来) { int 左=前线; int 右=; if (left & lt;,右) { int tmp =, arr(左); 而(left<右) { while (left & lt;, right ,,, tmp & lt;, arr[右]) { 正确的,; } arr(左),=,arr[右]; while (left & lt;, right ,,, tmp 祝辞,arr(左)) { 左+ +; } arr(右),=,arr(左); } arr(左),=,tmp; Quick_sort (arr面前,左一); Quick_sort(加勒比海盗,左+ 1,); } }时间复杂度o (nlog2n),空间复杂度o (nlog2n)
3,插入排序:
原理:插入排序就是讲一个数字插入到它本该占据的位置。
void Insertsort (int arr [], int 兰) { int 小姐:=,0; for (小姐:=,0;,小姐:& lt;, len-1;,我+ +) { arr int tmp =, (i + 1); int pos =,我; while (pos>=0,,,, arr (pos),祝辞,tmp) { arr [pos + 1],=, arr (pos); pos——; } arr [pos + 1],=, tmp; } }时间复杂度o (n ^ 2),空间复杂度o (1)。
4,希尔排序
原理:希尔排序就是基于插入排序的一种改进,先将整个待排元素分成若干个子序列(有相隔某个增量元素组成),分别进行插入排序,然后缩减增量再进行排序,待这整个元素基本有序时(增量足够小),再对全体元素进行一次插入排序。
源码:
void ShellSort (int arr [], int 兰) { int gap =, len; while (差距) {/2=gap 差距; for (int 小姐:=,差距;,小姐:& lt;, len;,我+ +) { arr int tmp =,(我); int pos =, i-gap; while (pos>=0,,,, arr (pos),祝辞,tmp) { arr (pos +差距),=,arr (pos); pos -=差距; } arr (pos +差距),=,tmp; } } }时间复杂度o (n ^ 2),空间复杂度o (1)。
5,选择排序
原理:在待排序列中将第一个元素记为最小的,第一个位置记为最小位置,在剩余所有元素中找到最小的与之交换。
源码:
void SelectSort (int arr [], int 兰) { for (int 小姐:=,0;,小姐:& lt;, len;,我+ +) { arr int min =,(我); int index =,我; for (int j =, + 1,, j & lt;, len;, j + +) { 如果(arr [j], & lt;, min) { min =, arr [j]; j=index ; } } arr arr(指数),=,(我); arr[我],=,最小值; } }时间复杂度o (n ^ 2),空间复杂度o (1)。
6,堆排
将初始化序列构成大堆,此堆为初始的无序区,将堆顶元素与最后一个元素交换位置,得到一个无序区和一个有序区,交换后的堆顶元素不变,因此将堆顶元素向下调整,保证最大堆的性质。
源码:
void HeapDown (int arr [], int 我,int 兰) { int 父母=我; int 孩子=2 * i + 1; while (child & lt;, len) { 如果孩子+ 1 & lt; len ,,, arr(孩子)& lt; arr[孩子+ 1]) { 孩子=+ 1; } 如果(arr(孩子)在arr(父)) { 交换(arr(父),arr[孩子]); 时间=parent 儿童; *=child parent 2, +, 1; } 其他的 { 打破; } } } void CreateHeap (int arr [], int 兰) { int i=0; (我=len/2 - 1, i>=0;我——) { HeapDown(加勒比海盗,我,len); } } void 堆排序(int arr [], int 兰) { CreateHeap (len arr); for (int 小姐:=,len-1;,小姐:祝辞=,0;,我——) { 交换(arr [0], arr[我]); HeapDown (arr 0我); } }常见的排序算法