EX:Sort

1.Bubble Sort (3)

1.1

#include <stdio.h>

int main(void) {
	int nums[4] = {1,5,3,2};
	//caculate the size of array
	size_t size = sizeof(nums) / sizeof(nums[0]);
	for (int i = 1; i < size; i++) {
		for (int j = 0; j < size - i; j++) {
			if (nums[j + 1] < nums[j]) {
			//exchange the values by adding an empty container
				int temp = nums[j];
				nums[j] = nums[j + 1];
				nums[j + 1] = temp;
			}
		}
	}
	printf("bubble sorted nums[4] = {");
	for (int k = 0; k < size; k++) {
		printf("%d",nums[k]);
		if (k != 3) {
			printf(",");
		}
	}
	printf("}\n");
	return 0;
}

output:

bubble sorted nums[4] = {1,2,3,5}

1.2 reversed

#include <stdio.h>

int main(void) {
	int nums[4] = {1,5,3,2};
	size_t size = sizeof(nums) / sizeof(nums[0]);
	for (int i = 1; i < size; i++) {
		for (int j = 3; j > i - 1; j--) {
			if (nums[j] > nums[j - 1]) {
			//exchange the values by adding an empty container
				int temp = nums[j];
				nums[j] = nums[j - 1];
				nums[j - 1] = temp;
			}
		}
	}
	printf("Reversed bubble sorted nums[4] = {");
	for (int k = 0; k < size; k++) {
		printf("%d",nums[k]);
		if (k != size - 1) {
			printf(",");
		}
	}
	printf("}\n");
	return 0;
}

output:

Reversed bubble sorted nums[4] = {5,3,2,1}

1.3

#include <stdio.h>

int main(void) {
	int nums[] = { 1,5,3,2 };
	//caculate the size of array
	size_t size = sizeof(nums) / sizeof(nums[0]);
	for (int i = 1; i < size; i++) {
		for (int j = 0; j < size - i; j++) {
			if (nums[j + 1] > nums[j]) {
			//exchange the values by adding an empty container
				int temp = nums[j];
				nums[j] = nums[j + 1];
				nums[j + 1] = temp;
			}
		}	
	}
	printf("2Reversed bubble Sorted nums[4] = {");
	for (int k = 0; k < size; k++) {
		printf("%d",nums[k]);
		if (k != size - 1) {
			printf(",");
		}
	}
	printf("}\n");
	return 0;
}

output:

2Reversed bubble Sorted nums[4] = {5,3,2,1}

2.Select Sort(3)

2.1 思路很像

#include <stdio.h>
int main(void) {
	int nums[4] = {1,5,3,2};
	int* pzero = nums;//default:the ptr to nums[0]
	size_t size = sizeof(nums) / sizeof(nums[0]);//caculate the array
	for (int i = 1; i < size; i++) {
		if (nums[i] > *pzero) {
		//exchange values by adding a  empty container 
			int temp = *pzero;//save the original value of nums[0]
			*pzero = nums[i];
			nums[i] = temp;//the original nums[0]
		}
	
	}
	for (int j = 2; j < size; j++) {
		if (nums[j] > *(pzero + 1)) {
		//exchange values by adding a empty container
			int temp2 = *(pzero + 1);
			*(pzero + 1) = nums[j];
			nums[j] = temp2;
		}
	
	}
	for (int k = 3; k < size; k++) {
		if (nums[k] > *(pzero + 2)) {
		//exchange values by adding a empty container
			int temp3 = *(pzero + 2);
			*(pzero + 2) = nums[k];
			nums[k] = temp3;
		}
	}
	printf("nums[4] = {");
	for (int d = 0; d < size; d++) {
		printf("%d",nums[d]);
		if (d != size - 1) {
			printf(",");
		}
	}
	printf("}\n");

	return 0;
}

output:

nums[4] = {5,3,2,1}

2.2 改

#include <stdio.h>

int main(void) {
	int nums[4] = {1, 5, 3, 2};
	int* pzero = nums;  // ptr to nums[0]
	size_t size = sizeof(nums) / sizeof(nums[0]);  // calculate array size

	// loop through each position to place the correct element
	for (int i = 0; i < size - 1; i++) {
		for (int j = i + 1; j < size; j++) {
			if (nums[j] > *(pzero + i)) {
				// swap values using an empty container
				int temp = *(pzero + i);
				*(pzero + i) = nums[j];
				nums[j] = temp;
			}
		}
	}

	// output the sorted array
	printf("Sorted nums[4] = {");
	for (int d = 0; d < size; d++) {
		printf("%d", nums[d]);
		if (d != size - 1) {
			printf(",");
		}
	}
	printf("}\n");

	return 0;
}

output:

Sorted nums[4] = {5,3,2,1}

2.3 minIndex

#include <stdio.h>

	int main(void) {
		int nums[4] = { 1,5,3,2 };
		size_t size = sizeof(nums) / sizeof(nums[0]);

		for (int i = 0; i < size - 1; i++) {
			//set the minindex []
			int min = i;
			for (int j = i + 1; j < size; j++) {
				if (nums[j] < nums[min]) {
					min = j;
				}
			
			}
			//exchange current value with the min value
			if (min != i) {
				int temp = nums[i];
				//exchange the values
				nums[i] = nums[min];
				nums[min] = temp;
			}
		
		}
		printf(" Sorted nums[4] = {");
		for (int k = 0; k < size; k++) {
			printf("%d", nums[k]);
			if (k != size - 1) {
				printf(",");
			}
		}
		printf("}");
	
	}

output:

 Sorted nums[4] = {1,2,3,5}

3.错误写法

当nums[4] ={ 1,5,3,2}时,排序正常,错误不明显,再增加数字之后:

#include <stdio.h>
int main(void) {
	int nums[7] = { 1,5,3,2,10,11,12};
	int* pzero = nums;//default: the ptr to nums[0]
	size_t size = sizeof(nums) / sizeof(nums[0]);
	for (int i = 1; i < size; i++) {
		for (int j = i - 1; j < size - 1; j++) {
			if (nums[j + 1] > *(pzero + j)) {
				//exchange the values by adding a empty comtainer
				int temp = *(pzero + j);
				*(pzero + j) = nums[j + 1];
				nums[j + 1] = temp;
			}
		}
	}
	printf("nums[7] = {");
	for (int k = 0; k < size; k++) {
		printf("%d", nums[k]);
		if (k != size - 1) {
			printf(",");
		}
	}
	printf("}");
	return 0;
}

output:

nums[7] = {5,3,11,12,10,2,1}

分析:
1.只比较了静态小区间里的最大值,而不是全局的最大值
2.内循环的起始值不合理
3.未排序和排序的部分界限不明,或者说根本没有全局排序,只是部分排序

4.总结

综上:排序只是一种思想,没有固定的写法,写法也只是实现思想的工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值