使用指针法对数组进行冒泡排序、选择排序、插入排序法、二分查找法

使用指针法对数组进行冒泡排序、选择排序、插入排序法、二分查找法


#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<stdio.h>
#include<time.h>

#define N 100
//指针各种排序
//①const 只读
void main2() {

	time_t ts;
	unsigned int   seed =  time(&ts);
	srand(seed);

	int a[N] = {0};

	int *pArray[N];
	for (int i = 0; i < N; i++)
	{
		printf("%3d", a[i] = rand() % 100);

		*(pArray + i) = a[i];
		if ((i+1) % 25 == 0) {
			printf("\n");
		}
	}

	printf("\n"); printf("\n");


	//*(pArray + i)
	//选择排序
	//for (int i = 0; i < N; i++)
	//{
	//	for (int j = i+1; j < N; j++)
	//	{
	//		if (*(pArray + i) > *(pArray + j))
	//		{
	//			int temp = *(pArray + j);
	//			*(pArray + j) = *(pArray + i);
	//			*(pArray + i )= temp;
	//		}
	//	}
	//	printf("%3d", pArray[i]);
	//	if ((i + 1) % 25 == 0) {
	//		printf("\n");
	//	}
	//}

	冒泡排序
	//for (int i = 0; i < N-1; i++)
	//{
	//	for (int  j = 0; j < N-1-i; j++)
	//	{
	//		if (*(pArray + j)>*(pArray + j+1))
	//		{
	//			int temp = *(pArray + j);
	//			*(pArray + j) = *(pArray + j + 1);
	//			*(pArray + j + 1) = temp;
	//		}
	//	}
	//}

	//插入排序法
	//	1、保存一个临时变量
	//	2、记录那个个临时变量的下标 j
	//	3、如果这个下标大于0 并且 临时标量 小于 数组[j - 1]这个数字
	//	①那么就不断往后移动,数组[j] = 数组[j - 1]
	//	②否则 就是到了该插入的位置了,结束循环,
	//	③得到最佳位置j 插入数值
	for (int  i = 1; i < N; i++)
	{
		int temp = pArray[i];
		int j = i;
		while (j>0 && temp< pArray[j-1])
		{
			pArray[j] = pArray[j - 1];
			j--;
		}
		pArray[j] = temp;
	}



	for (int  i = 0; i < N; i++)
	{
		printf("%3d", pArray[i]);
		if ((i + 1) % 25 == 0) {
			printf("\n");
		}
	}

	int  pNum;
	printf("打个数字\n");
	scanf("%d", &pNum);
	//二分查找法
	int high = N - 1;
	int low = 0;
	int mid = 0;
	int  flag = 0 ;
	while (low <= high) {
		mid = (high + low) / 2;
		if (pArray[mid] == pNum) {
			flag = 1;
			break;
		}
		if (pNum > pArray[mid]) {
			low = mid + 1;
		}
		else {
			high = mid - 1;
		}
	}

	printf("\n");
	printf(flag?"找到":"没有找到");


	system("pause");


		
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值