• 快速排序和二分查找


    //从小到大排序
    //快排思路:选定一个基准值,将比基准值大的放在基准值右边,小的放在基准值左边。然后通过递归来讲序列的长度继续划分为左右两边,等到最后只剩两个元素的时候交换排序,不断递归到上一层

    进行排序。感觉和归并排序有点像,最后都是分为两个元素。

    时间复杂度大概是O(nlogn),
    空间复杂度:O(logn)
    稳定性:快速排序无法保证相等的元素的相对位置不变,因此它是不稳定的排序算法
     
    //二分查找:原理是对一个顺序的数列arr(lo,hi),从数列中间(mid)开始,中间元素arry[mid]与想要寻找的元素(num)进行比较,如果比他大,就从arr(lo,mid-1)的区间去查找,否则就去arry(mid+1,hi)的区间去找
    记住hi的值要用mid去更新
     
    #include<stdio.h>
    
    
    void quick_sort(int arr[],int left,int right)
    {
        int i = left, j = right, base = arr[left];
        if (i >= j)
            return;
        while (i<j)
        {
            while (base <= arr[j] && i < j)//等到找到比基准值小的结束
                j--;
            while (base >= arr[i] && i < j) //等到比基准值大的结束
                i++;
            if (i < j) //如果左边索引小于右边索引,交换两个位置的值
            {
                int tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
            }
        }
        arr[left] = arr[i];//将最后交换过的值放在开头
        arr[i] = base;//将基准值放在最后交换过的位置上,这个位置左边比基准值小,右边比基准值大
        quick_sort(arr, left, i - 1);//分别对基准值左边和右边进行递归排序。
        quick_sort(arr, i + 1, right);
    }
    //二分查找
    int find_i(int arr[],int lo,int hi,int value)
    {
        int mi=(hi+lo)/2;
        while(lo<hi)
        {
            if(value==arr[mi])
            {
                return mi;
            }
            if(value<arr[mi])
            {
                hi=mi;
                mi=(hi+lo)/2;
            }
            else
            {
                lo=mi;
                mi=(hi+lo)/2;
            }
        }
        return -1;
    }

    int main() { int arr[] = { 1 ,5,9,5,6,7 }; quick_sort(arr, 0, 5); for (int i = 0; i < 6; i++) { printf("%d ", arr[i]); }
       printf(" %d ",find_i(arr,0,10,5));
    return 0; }
  • 相关阅读:
    第33周二
    第33周一
    第32周日
    第32周六
    RichTextBox 右键显示 ContextMenuTrip
    关于 Head First SQL 中文版
    linux进程通信之共享内存
    chroot 与 jail
    SQL基础--&gt; 约束(CONSTRAINT)
    MessageDigest简单介绍
  • 原文地址:https://www.cnblogs.com/zongji/p/13321760.html
Copyright © 2020-2023  润新知