各種排序演算法的實現

2021-07-24 22:59:40 字數 2912 閱讀 9639

排序演算法總結

關於演算法的不穩定性不是很理解,需要進一步加強。

很形象

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 實現插入排序 選擇排序 氣泡排序 雙向冒泡 快速排序 二路歸併排序等多種...