zoukankan      html  css  js  c++  java
  • 选择,冒泡排序,折半查找,插入

    #include <stdio.h>
    
    void selectSort(int nums[], int length);
    void bubbleSort(int nums[], int length);
    int findKey(int num[], int len, int k);
    int insertKey(int num[], int len, int k);
    
    void print(int arr[], int len)
    {
        for (int i = 0; i<len; i++) {
            printf("%d	", arr[i]);
        }
        printf("
    ");
    }
    
    int main(int argc, const char * argv[]) {
        // 选择排序
        int a[5] = {3, 2, 4, 1, 5};
        int len = sizeof(a) / sizeof(a[0]);
        print(a,len);
        selectSort(a, len);
        print(a,len);
        
        printf("----------------------
    ");
        
        // 冒泡排序
        int b[5] = {3, 2, 4, 1, 5};
        int len2 = sizeof(b) / sizeof(b[0]);
        print(b,len2);
        bubbleSort(b, len2);
        print(b,len2);
        
        printf("----------------------
    ");
        
        // 折半查找
        int nums[] = {1, 3, 5, 7, 9, 11};
        int key = 5;
        int length = sizeof(nums) / sizeof(nums[0]);
        int index = findKey(nums, length, key);
        if (index != -1) {
            printf("查找元素的索引为:index = %d
    ", index);
        }else{
            printf("找不到该元素");
        }
        
        // 插入位置
        key = 6;
        int index2 = insertKey(nums, length, key);
        printf("key要插入的位置索引为:index = %d
    ", index2);
        
        
        return 0;
    }
    
    // 交换两个元素的位置
    void swip(int nums[], int i, int j)
    {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
    
    /** 选择排序 */
    void selectSort(int nums[], int length)
    {
        for (int i = 0; i < length - 1; i++) {
            for (int j = i + 1; j < length; j++) {
                if (nums[i] > nums[j]) {
                    swip(nums, i, j);
                }
            }
        }
    }
    
    /** 冒泡排序 */
    void bubbleSort(int nums[], int length)
    {
        for (int i = 0; i < length; i++) {
            for (int j = 0; j < length - i - 1; j++) {
                if (nums[j] > nums[j+1]) {
                    swip(nums, j, j+1);
                }
            }
        }
    }
    
    /** 
     *折半查找
     *
     *如果找到返回查找索引,没有找到返回-1
     */
    //
    int findKey(int num[], int len, int k)
    {
        int min = 0, max = len - 1;
        int mid = (min + max) / 2;
        
        while (1) {
            
            if (min > max){
                return -1;
            }
            
            if (k == num[mid]) {
                return mid;
            }else if(k < num[mid]){
                max = mid - 1;
            }else{
                min = mid + 1;
            }
            
            mid = (min + max) / 2;
        }
    }
    
    /**
     插入位置
     */
    int insertKey(int num[], int len, int k)
    {
        int min = 0, max = len - 1;
        int mid = (min + max) / 2;
        
        while (min <= max) {
            if (k == num[mid]) {
                return mid;
            }else if(k < num[mid]){
                max = mid - 1;
            }else{
                min = mid + 1;
            }
            mid = (min + max) / 2;
        }
        
        return min;
    }
    
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    ArrayList集合封装 类 并通过方法调用
    ArrayList集合的基本操作
    方法的重复定义和重载
    方法间值的传递,二维数组的定义和遍历
    赋值运算,逻辑运算符,引用数据类型
    Javase;jdk的安装调试;基础语法和变量以及基础数据类型
    E-R画图规则和数据库设计的三大范式
    sql多表查询和子查询
    sql约束的使用
    sql表操作的基础语法
  • 原文地址:https://www.cnblogs.com/liuqblog/p/4896279.html
Copyright © 2011-2022 走看看