算法

2016-06-14  本文已影响11人  英雄出少年

一、选择排序
选择排序 : 从小到大
特点: 拿到其中一个元素依次和其他元素进行比较,最小值出现在0位

int nums[8] = {99, 12, 88, 34, 5, 44, 12, 100};
for(int i = 0 ; i<8 ; i++)
{
  for(int j = i+1 ; j<= 8 ; j++)
{
  if(nums[i] > nuts[j])
{
  int temp = nums[i];
 nums[i] = nums[j];
nums[j] = temp;
}
}
}

二、冒泡排序
冒泡排序从小到大
特点:相邻的两个元素进行比较,每次比较完,最值出现在最后

int nums[8] = {99, 12, 88, 34, 5, 44, 12, 100};
for(int i = 0 ; i<8 ; i++)
{
  for(int j = 0;j < 8 - i; j++)
  {
    if(nums[j] > nums[j+1])
    {
      int temp = nums[j];
      nums[j] = nums[j+1];
      mums[j+1] = temp;
    }
  }

}

三、折半查找
折半查找原理:
数组必须是有序的,必须已知min 和 max(知道范围),动态计算mid的值,取出mid的值进行比较,
如果mid对应的值大于需要查找的值,那么max要变小为 mid - 1;
如果mid对应的值小于需要查找的值,那么min要变大为 mid + 1;

int findKey3(int nums[], int length, int key)
{
    int min, max, mid;
    min = 0;
    max = length - 1;
    
    // 只要还在我们的范围内就需要查找
    while (min <= max) {
        // 计算中间值
        mid = (min  + max) / 2;
        if (nums[mid] < key) {
            min = mid + 1;
        }else if (nums[mid] > key )
        {
            max = mid - 1;
        }else
        {
            return mid;
        }
        
    }
    return -1;
}
上一篇 下一篇

猜你喜欢

热点阅读