昆仑山:眼中无形心中有穴之穴人合一

夫君子之行,静以修身,俭以养德;非澹泊无以明志,非宁静无以致远。夫学须静也,才须学也;非学无以广才,非志无以成学。怠慢则不能励精,险躁则不能冶性。年与时驰,意与岁去,遂成枯落,多不接世。悲守穷庐,将复何及!

 

数据结构(C语言版本)

交换

#include<stdio.h>
#include<stdlib.h>
#define swap3(x,y,t) ((t)=(x),(x)=(y),(y)=(t)) //方法4
void swap1(int x, int y) {//方法2 不成功
	x = x ^ y;
	y = x ^ y;
	x = x ^ y;
}
void swap2(int *x, int *y) {//方法3 
	*x = *x ^* y;
	*y = *x ^* y;
	*x = *x ^* y;
}
int main() {

	int a = 3, b = 4;
	printf("a=%d\tb=%d\t\n", a, b);
	/*
	//方法1
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	*/
	//swap1(a, b);

	//swap2(&a, &b);
	int temp;
	swap3(a, b, temp);
	printf("a=%d\tb=%d\t\n", a, b);
	system("pause");
	return 0;
}

排序

冒泡排序

从左向右扫描数据,选择最大的数据,放在右边。
要点:比较相邻的两个数,如果左边的数大于右边的数就进行交换。
#include<stdio.h>
#include<stdlib.h>
//#define swap(x,y,t) ((t)=(x),(x)=(y),(y)=(t)) 
#define swap(x,y) ((x)=(x)^(y),(y)=(x)^(y),(x)=(x)^(y))  //交换两个元素
void BubbleSort(int*a, int n/*数组长度*/) {
	for (int i = 0; i < n - 1; i++) {//外循环
		for (int j = 0; j < n - i - 1; j++) {//内循环
			if (a[j] > a[j + 1]) {
				//int temp;
				//swap(a[j], a[j + 1], temp);
				swap(a[j], a[j + 1]);
			}
		}
	}
}
void print(int *a) {//打印结果
	int i;
	for ( i= 0; i < 10; i++)
	{
		if (i == 10) {
			printf("%d\n", a[i]);
		}
		else {
			printf("%d\t", a[i]);
		}
	}
}
int main() {
	int a[10] = { 9,8,7,6,5,4,3,2,1,0 };
	print(a);//交换前的元素
	putchar(10);//换行
	BubbleSort(a, 10);//排序
	print(a);//交换后的元素
	putchar(10);//换行
	system("pause");
}

选择排序

从当前未排序的整数中找一个最小的整数,将它放在已排序的整数列表的最后。
要点:选择排序选最小的,往左边选。
冒泡排序与选择排序
#include<stdio.h>
#include<stdlib.h>
//#define swap(x,y,t) ((t)=(x),(x)=(y),(y)=(t)) 
#define swap(x,y) ((x)=(x)^(y),(y)=(x)^(y),(x)=(x)^(y))  //交换两个元素
void SelectSort(int*a, int n) {
	size_t min;
	for(size_t i = 0; i < n-1; i++){
		////内层循环j=i+1,外层循环控制着循环次数。即每趟中a[i]这个值就是本趟的最小值。i位置上是最小值
		 min= i;//每次都从已排序序列的末尾后一位开始
		for (size_t j = i+1; j < n; j++){
			if (a[j] < a[min]) {//寻找最小的数
				min = j;//将最小数的索引保存
			}
		}
		if (i != min) {//这个判定条件不要忘记
			swap(a[i], a[min]);//交换两元素
		}
		
#if 0
		size_t temp = a[i];
		a[i] = a[min];
		a[min] = temp;
#endif
	}
}
void print(int *a) {//打印结果
	int i;
	for ( i= 0; i < 10; i++)
	{
		if (i == 10) {
			printf("%d\n", a[i]);
		}
		else {
			printf("%d\t", a[i]);
		}
	}
}
int main() {
	
	int a[10] = { 9,8,7,6,5,4,3,2,1,0 };
	print(a);//交换前的元素
	putchar(10);//换行
	SelectSort(a, 10);//排序
	print(a);//交换后的元素
	putchar(10);//换行

	system("pause");
}

posted on 2018-06-21 13:18  Indian_Mysore  阅读(148)  评论(0编辑  收藏  举报

导航