排序演算法總結
關於演算法的不穩定性不是很理解,需要進一步加強。
很形象
int a[n] = ;
int b[n] = ;
int c[n] = ;
插入排序
void insert_sort(int arr)
arr[j + 1] = key;//將key移動到前邊沒有比key大的值得位置上
print_arr(arr);}}
6 9 2 1
69 2 1 ->6 9 2 1
6 92 1 ->2 6 9 1
2 6 9
1 ->1 2 6 9
氣泡排序
void bubble_sort(int a)
print_arr(a);}}
}
6 9 2 1
6 9 2 1 -> 6 9 1 2
6 9 1 2 -> 6 1 9 2
6 1 9 2 -> 1 6 9 2
1 6 9 2 -> 1 6 2 9
1 6 2 9 -> 1 2 6 9
1 2 6 9 -> 1 2 6 9
選擇排序
void select_sort(int a)
swap(a[i], a[min]);
print_arr(a);}}
6 9 2 1
69 2 1 ->6 9 2 1
6 9 2 1 ->2 9 6 1
2 9 6 1 ->1 9 6 2
1 96 2 ->1 6 9 2
1 6 9 2 ->1 2 9 6
1 2 9
6 ->1 2 6 9
/快速排序
int partition(int a, int p, int q)
}swap(a[i + 1], a[q]);
return i + 1;
}void rescursive_quicksort(int a, int p, int q)
}void quick_sort(int a)
歸併排序
void merge(int a, int p, int q, int m)
while (i < n1) /* left is not exhausted */
a[k++] = left[i++];
while (j < n2) /* right is not exhausted */
a[k++] = right[j++];
print_arr(a);
}void recursive_merge_sort(int a, int p, int q)
}void merge_sort(int a)
堆排序
兩部分:(1) 形成最大堆(最頂端數最大),從底部向上計算
(2)將top移到最末,對於0~n-2的陣列進行處理,形成新的最大堆
void heap_adjust(int a, int s, int
length)//序號s為根節點
else
break;
a[s] = temp;//給以前的子節點(新的根節點賦原根節點的值)
}print_arr(a);
}void build_max_heap(int a)
void heap_sort(int a)
print_arr(a);
}
希爾排序
變步長的插入排序,這裡我用的步長為n/2,n/4,…1
void shell_sort(int a)
a[j + step] = key;
}print_arr(a);}}
計數排序
開闢乙個count計數陣列,統計原陣列各個數的頻數,累加得到累積頻數,減一即在新陣列中的位置。
void counting_sort(int a,int k)
//k = max + 1;
int *count = new
int[k];
int *b = new
int[n];
for (int i = 0; i < k; ++i)
count[i]=0;
for (int i = 0; i < n; ++i)
++count[a[i]];
for (int i = 1; i < k; ++i)//從1開始算哦
count[i] = count[i] + count[i - 1];//統計不比a[i]大的數的個數,就是a[i]在新的陣列中的位置
for (int i = n-1; i >=0; --i)
print_arr(b);
delete count;
delete b;
}
基數排序
先比個位(計數排序),然後依次十位,百位…
int* getbit(int a, int bit_num)
return b;
}void radix_sort(int a)
for (int i = 0; i < n; ++i)
a[i] = temp[i];
print_arr(a);
}delete num;
delete temp;
}
各種排序演算法的實現
各種排序演算法的實現 1.快速排序 void swap int a,int b int partion int a,int p,int r a p a j a j x return j void quick sort int a,int p,int r a s rc heap adjust void...
各種排序演算法的實現
排序演算法在很多面試中都會涉及到,而且還分為很多種,看得眼花繚亂的,這兒我就先說說幾個較簡單的演算法的實現 本來是想把各種排序方法寫在乙個函式裡可供選擇使用的,但是想著還是把每種演算法直觀的說清楚最好,故分開實現。1 插入排序 插入排序可以聯想到玩撲克牌,當你手上有若干張排好序的牌,又拿起一張新的牌...
各種排序演算法的實現
用隨機函式生成16個2位正整數 10 99 實現插入排序 選擇排序 氣泡排序 雙向冒泡 快速排序 二路歸併排序等多種排序演算法,輸出排序中間過程 統計關鍵字的比較次數和記錄的移動次數。用隨機函式生成16個2位正整數 10 99 實現插入排序 選擇排序 氣泡排序 雙向冒泡 快速排序 二路歸併排序等多種...