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

时间:2021-09-09 22:08:44

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


#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");



}