开这个专题主要是用于维持一种编程状态,在有算法的情况下.来解决实际生活的问题是一种很好的编程习惯.
- 二分查找
#include <stdio.h>
int BinySerch(int *arr, int temp, int lengh)//设计参数,由于是整形数组,所以我们必须传递他
{ //长度否则数组传参时会发生降级
int left = 0, right = lengh - 1;
int mid ;
while (left <= right)
{
mid = left + (right - left) / 2;
if (temp < arr[mid])
{
right = mid - 1;
}
else if (temp > arr[mid])
{
left = mid + 1;
}
else
{
return mid;
}
}
return -1;
}
- 插入排序 *
void insertSort(int *array, int len)
{
int i, j, temp;
for(i = 1; i < len; i ++)
{
temp = array[i];
for(j = i - 1; j >= 0; j --)
{
if(array[j] > temp)
{
array[j + 1] = array[j];
}else
{
break;
}
}
array[j + 1] = temp;
}
}
-
快速排序
*函数名:swap
*作用:交换两个数的值
*参数:交换的两个数
*返回值:无
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
return ;
}
void quicksort(int array[], int maxlen, int begin, int end)
{
int i, j;
if(begin < end)
{
i = begin + 1; // 将array[begin]作为基准数,因此从array[begin+1]开始与基准数比较!
j = end; // array[end]是数组的最后一位
while(i < j)
{
if(array[i] > array[begin]) // 如果比较的数组元素大于基准数,则交换位置。
{
swap(&array[i], &array[j]); // 交换两个数
j--;
}
else
{
i++; // 将数组向后移一位,继续与基准数比较。
}
}
/* 跳出while循环后,i = j。
* 此时数组被分割成两个部分 --> array[begin+1] ~ array[i-1] < array[begin]
* --> array[i+1] ~ array[end] > array[begin]
* 这个时候将数组array分成两个部分,再将array[i]与array[begin]进行比较,决定array[i]的位置。
* 最后将array[i]与array[begin]交换,进行两个分割部分的排序!以此类推,直到最后i = j不满足条件就退出!
*/
if(array[i] >= array[begin]) // 这里必须要取等“>=”,否则数组元素由相同的值时,会出现错误!
{
i--;
}
swap(&array[begin], &array[i]); // 交换array[i]与array[begin]
quicksort(array, maxlen, begin, i);
quicksort(array, maxlen, j, end);
}
}