//这里说的是一个指针,指向算法的应用
//直接排序
//每个排序算法是指针指向的每个元件的特性的方便的交流
//这里的基本思想是,处理的记录的排序n - 1第二选择。
//第i次操作选择i大(小)的记录放在第i个(或者n - i - 1 个)位置上。
//即每次都将一个记录放在它终于的位置上,
//这就是所谓的“各回各家”
#include <iostream>
#include <cstdio>
using namespace std;
void SelectSort(int *Array, int n)
{
int i, j, m, a;
//从无序的序列中找到最小值的位置
for(i = 0; i < n - 1; i++)
{
m = 1;
for(j = i + 1; j < n; ++j)
{
if(*(Array + j) < *(Array + m))
m = j;
}
/*
*记录当前最小值的位置
* */
if(m != 1)
{
a = *(Array + m);
*(Array + m) = *(Array + 1);
*(Array + i) = a;
}
}
}
int main()
{
int i = 0;
int Array[10] = {12, 2, 37, 67, 90, 1, 78, 67, 2, 32};
printf("待排序的数组为:\n");
for(i = 0; i < 10; ++i)
{
printf("%d\t", *(Array + i));
}
SelectSort(Array, 10);
printf("\n直接排序后的结果为:\n");
for(int j = 0; j <10; ++j)
{
printf("%d ", *(Array + j));
}
printf("\n");
return 0;
}
//查找,当中涉及指针的偏移
//查找分为顺序查找
//折半查找
//儿茶查找
//分块查找
//这里举的样例是二分查找
#include <iostream>
#include <cstdio>
using namespace std;
int BinarySearch(int * Array, int n, int x)
{
int low, high, middle;
low = 0, high = n - 1;
while(low <= high)
{
middle = (low + high)/2;
if(*(Array + middle) == x)
return 1;
else
{
if(*(Array + middle) >= x)
{
high = middle - 1;
}
if(*(Array + middle) <=x)
{
low = middle + 1;
}
}
}
}
int main()
{
int Array[10] = {2, 4, 5, 13, 15, 20, 30, 35, 40, 50};
int x1, x2;
x1 = 20;
x2 = 33;
if(BinarySearch(Array, 10, x1))
printf("已经找到%d\n", x1);
else
printf("未找到%d\n", x1);
if(BinarySearch(Array, 10, x2))
printf("已经找到%d\n", x2);
else
printf("未找到%d\n", x2);
return 0;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。