代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void BubbleSort(int* a, int len) {
int i, j, temp;
for (i = 0; i < len - 1; i++) {
for (j = i + 1; j < len; j++) {
if (*(a + i) > *(a + j)) {
temp = *(a + j);
*(a + j) = *(a + i);
*(a + i) = temp;
}
}
}
}
void Quick_Sort(int* a, int low, int high) {
if ( high < low) return ;
int temp = *(a + low);
int left = low;
int right = high;
while (left < right) {
while (left < right && temp <= *(a + right)) {
right--;
}
if (left < right) {
*(a + left) = *(a + right);
}
while (left < right && temp >= *(a + left)) {
left++;
}
if (left < right) {
*(a + right) = *(a + left);
}
}
*(a + left) = temp;
Quick_Sort(a, low, left - 1);
Quick_Sort(a, left + 1, high);
}
void Straight_Select_Sort(int* a, int len) {
int i, j, min, temp, min_arr;
for (i = 0; i < len; i++) {
min = i;
for (j = i; j < len; j++) {
if (*(a + j) < *(a + min)) {
min = j;
}
}
if (min != i) {
temp = *(a + i);
*(a + i) = *(a + min);
*(a + min) = temp;
}
}
}
void Heap_Swap(int* a, int n1, int n2) {
int temp = *(a + n1);
*(a + n1) = *(a + n2);
*(a + n2) = temp;
}
void Heap_Adjust(int* a, int num, int size) {
int left = 2 * num + 1;
int right = 2 * num + 2;
int max = num;
if (left < size && *(a + max) < *(a + left)) {
max = left;
}
if (right < size && *(a + max) < *(a + right)) {
max = right;
}
if (max != num) {
Heap_Swap(a, num, max);
Heap_Adjust(a, max, size);
}
}
void Heap_Sort(int* a, int len) {
int i;
for (i = len/2 - 1; i >= 0; i--) {
Heap_Adjust(a, i, len);
}
for (; len > 0; len--) {
Heap_Swap(a, 0, len);
Heap_Adjust(a, 0, len);
}
}
void swap(int* a, int n1, int n2) {
int temp = *(a + n1);
*(a + n1) = *(a + n2);
*(a + n2) = temp;
}
void Shell_Sort(int* a, int len) {
int i, j;
for (i = len/2; i > 0; i/=2) {
for (j = i; j < len; j++) {
int temp = j;
while (temp >= i && *(a + temp) < *(a + temp - i)) {
swap (a, temp, temp - i);
temp -= i;
}
}
}
}
int main()
{
int a[10] = {4, 5, 2, 7, 8, 10, 1, 9, 3, 6};
int length = 10;
Shell_Sort(a, length);
int i;
printf("a[10] = ");
for (i = 0; i < length; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}