还是排序,为什么突然对排序感兴趣了呢?我自己都不太清楚。

//: 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");	
}
发布了159 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_39410618/article/details/90733232