//: test20.c
// 这应该是插入排序吧?(“插入”多么有想象力的词汇,令人浮想联翩,似乎编程中也有苍老师的指导)
#include <stdio.h>
#define L 9
int main(void) {
int a[L] = {3, -1, 4, 5, 6, 7, 0, -10, -1};
int i, j, tmp;
printf("排序前的数列:");
for(i = 0; i < L; i++) {
printf("%d ", a[i]);
}
printf("\n\n");
for(i = 1; i < L; i++) {
for(tmp = a[i], j = i - 1; j >= 0 && a[j] > tmp; j--) {
a[j + 1] = a[j];
}
a[j + 1] = tmp;
}
printf("排序后的数列:");
for(i = 0; i < L; i++) {
printf("%d ", a[i]);
}
printf("\n");
}
///:~
//: test21.c
// 这是不是希尔排序也不太清楚,书上和网上形式很多
// 弄得我都糊涂了
#include <stdio.h>
#define L 11
int main(void) {
int a[L] = {-1, -100, -25, -8, -7, 0, 3, 3, 0, 10, -20};
int tmp, d, i, j, k;
printf("排序前的数列:");
for(i = 0; i < L; i++) {
printf("%d ", a[i]);
}
printf("\n\n");
for(d = L / 2; d > 0; d /= 2) {
for(k = 0; k < d; k++) {
for(i = k + d; i < L; i += d) {
for(tmp = a[i], j = i - d; j >= 0 && a[j] > tmp; j -= d) {
a[j + d] = a[j];
}
a[j + d] = tmp;
}
}
}
printf("排序后的数列:");
for(i = 0; i < L; i++) {
printf("%d ", a[i]);
}
printf("\n");
}
//: test22.c
// 交换排序中的冒泡排序
#include <stdio.h>
#define L 9
int main(void) {
int a[L] = {9, 8, 7, 6, 0, -1, -2, -3, -1};
int i, j, tmp;
printf("排序前的数列:");
for(i = 0; i < L; i++) {
printf("%d ", a[i]);
}
printf("\n\n");
for(i = 0; i < L - 1; i++) {
for(j = 0; j < L - i - 1; j++) {
if(a[j] > a[j + 1]) {
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
printf("%d --- %d\n", j, j + 1);
}
}
}
printf("排序后的数列:");
for(i = 0; i < L; i++) {
printf("%d ", a[i]);
}
printf("\n");
}
//: test23.c
// 选择排序
#include <stdio.h>
#define L 11
int main(void) {
int a[L] = {-2, -1, 0, 9, 8, 0, 7, 9, 8, -3, -4};
int tmp, i, j;
printf("排序前的数列:");
for(i = 0; i < L; i++) {
printf("%d ", a[i]);
}
printf("\n\n");
for(i = 0; i < L; i++) {
for(j = i + 1; j < L; j++) {
if(a[i] > a[j]) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
printf("%d --- %d\n", i, j);
}
}
}
printf("排序后的数列:");
for(i = 0; i < L; i++) {
printf("%d ", a[i]);
}
printf("\n");
}
//: quicksort.c
// quick sort
#include <stdio.h>
#define L 17
void quicksort(int* a, int left, int right) {
if(left >= right) {
return;
}
int i = left;
int j = right;
int key = a[left];
while(i < j) {
while(i < j && key <= a[j]) {
j--;
}
a[i] = a[j];
while(i < j && key >= a[i]) {
i++;
}
a[j] = a[i];
}
a[i] = key;
quicksort(a, left, i - 1);
quicksort(a, i + 1, right);
}
int main(void) {
int a[L] = {-1, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 9, 0, -2, 6, 3, 0};
int i;
for(i = 0; i < L; i++) {
printf("%d ", a[i]);
}
printf("\n\n");
quicksort(a, 0, 16);
for(i = 0; i < L; i++) {
printf("%d ", a[i]);
}
printf("\n\n");
}