排序查找c++

作者: 三角绿毛怪 | 来源:发表于2019-07-03 15:08 被阅读0次

    排序算法

    选择排序

    #include <iostream>
    using namespace std;
    //选择排序(冒泡排序的改进版本)
    void SelectSort(int *x, int n);
    void print(int *x,int n);
    
    int main()
    {
        cout << "----排序前----" << endl;
        int x[] = { 0,2,4,6,8,1,3,5,7,9 };
        print(x, 10);
        SelectSort(x,10);
        cout << "----排序后----" << endl;
        print(x, 10);
        return 0;
    }
    void print(int *x,int n)
    {
        for (int i = 0; i < n; i++)
        {
            cout << x[i] << endl;
        }
    }
    void SelectSort(int* x, int n)
    {
        //现对外层进行一次循环,n次和n-1次是一样的排好了前n-1次就相当于排好了n次,节约时间
        for (int i = 0; i < n-1; i++)
        {
            //每一次循环都对i做一次标记,假定他就是最小的那个
            int min = i;
            //第二次循环从第二个数开始,到结尾
            for (int j = i+1; j < n; j++)
            {
                //如果这个数外层循环标记的那个数要小,就标记小的那个数
                if (x[j] < x[min])
                {
                    min = j;
                }
                //然后交换他们的位置(从第一个数开始)
                int temp;
                temp = x[i];
                x[i] = x[min];
                x[min] = temp;
            }
        }
    
    }
    

    顺序查找

    #include <iostream>
    using namespace std;
    
    //就是统统遍历一遍
    int SequentialSearch(int* a, int n, int x);
    
    int main()
    {
        int a[] = { 0,1,3,5,7,9,2,4,6,8 };
        int result;
        int num = 8;
        result = SequentialSearch(a, 10, num);
        if (result < 0)
            cout << "没找到!" << endl;
        else
            cout << "在a[" << result << "]里找到" << num << endl;
        return 0;
    }
    
    int SequentialSearch(int* a, int n, int x)
    {
        //未排序只能遍历查找每一个
        for (int i = 0; i < n; i++)
        {
            if (a[i] == x)
                return i;
            //如果查找到n说明到了头还没找到则返回-1
            if (i == n) return -1;
        }
    
    }
    

    二分查找

    #include <iostream>
    using namespace std;
    
    int BinarySearch(int* a, int x, int n);
    
    int main()
    {
        int x[] = { 1,2,3,4,5,6,7,8,9,10 };
        int result;
        int num = 7;
        result = BinarySearch(x, num, 10);
        if (result < 0)
            cout << "没找到" << endl;
        else
            cout << "在x[" << result << "]找到" << num<<endl;
        return 0;
    }
    
    int BinarySearch(int* a, int x, int n)
    {
        int low = 0, high = n-1;
        int mid;
        //设定一个循环的条件,加加减减不超过上下限就循环
        while (low <= high)
        {
            //选定中间的那个数
            mid = (low + high) / 2;
            //如果找到了直接返回
            if (a[mid] == x)
                return mid;
            //如果在上半部分,下限所减一半,再循环
            else if (a[mid] > x)
                high = mid - 1;
            //如果在上半部分,上线往下挪一挪,再循环
            else if (a[mid] < x)
                low = mid + 1;
        }
        //超出循环,直接返回-1
        return -1;
    }
    

    相关文章

      网友评论

        本文标题:排序查找c++

        本文链接:https://www.haomeiwen.com/subject/ovnqhctx.html