c/c++ 排序
#include <stdio.h>
void swap(int arr[], int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
void heapify(int tree[], int n, int i) {
if (i >= n)return;
int c1 = 2 * i + 1;
int c2 = 2 * i + 2;
int max = i;
if (c1 < n && tree[c1] > tree[max]) {
max = c1;
}
if (c2 < n && tree[c2] > tree[max]) {
max = c2;
}
if (max != i) {
swap(tree, max, i);
heapify(tree, n, max);
}
}
void build_heap(int tree[], int n) {
int last_node = n - 1;
int parent = (last_node - 1) / 2;
for (int i = parent; i >= 0; i--) {
heapify(tree, n, i);
}
}
void heap_sort(int tree[], int n) {
build_heap(tree,n);
for (int i = n - 1; i >= 0; i--) {
swap(tree, i, 0);
heapify(tree, i, 0);
}
}
void bubble_sort(int arr[], int len) {
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr, j, j + 1);
}
}
}
}
void select_sort(int arr[], int len) {
for (int i = 0; i < len-1; i++) {
int min = i;
for (int j = i + 1; j < len; j++) {
if (arr[j] < arr[min])
min = j;
}
if (min != i) {
swap(arr, i, min);
}
}
}
int main() {
int tree[] = { 2,5,3,1,10,4,2 };
//int tree[] = { 10,5,8,3,4,6,7,1,2 };
int len = sizeof(tree)/sizeof(tree[0]);
//printf("len is %d\n", len);
//heapify(tree, len, 0);
//build_heap(tree, len);
select_sort(tree, len);
for (int i = 0; i < len; i++) {
printf("select_sort tree[%d] = %d\n", i, tree[i]);
}
bubble_sort(tree, len);
for (int i = 0; i < len; i++) {
printf("bubble_sort tree[%d] = %d\n", i, tree[i]);
}
heap_sort(tree, len);
for (int i = 0; i < len; i++) {
printf("heap_sort tree[%d] = %d\n", i, tree[i]);
}
getchar();
return 0;
}
好好享用吧!!!