排序和查找(C++)

1. 快速排序:

class Solution {
public:
    void qs(vector<int>& a, int left, int right) {
        if(left>=right) return;
        int target=a[left], temp, i=left, j=right;
        
        while(i<j) {
            while(a[j]>=target && i<j) j--;
            while(a[i]<=target && i<j) i++;
            
            temp=a[j];
            a[j]=a[i];
            a[i]=temp;
        }
        
        a[left]=a[i];
        a[i]=target;
        qs(a, left, i-1);
        qs(a, i+1, right);
    }
    
    void sortColors(vector<int>& nums) {
        qs(nums, 0, nums.size()-1);
    }
};

 

2. 归并排序:

 

3. 二分查找:

### C++ 中排序查找算法的实现 #### 排序算法概述 在计算机科学领域,排序是一种基本的操作。不同的排序算法具有各自的特性,适合于不同场景下的数据处理需求。以下是两种经典的排序算法——冒泡排序快速排序。 #### 冒泡排序 (Bubble Sort) 冒泡排序是最基础的交换类排序方法之一。其核心思想是通过多次比较相邻元素并将较大的元素逐步移动到序列末端完成排序过程[^1]。 ```cpp void bubbleSort(int arr[], int n) { bool swapped; for (int i = 0; i < n - 1; ++i) { swapped = false; for (int j = 0; j < n - i - 1; ++j) { if (arr[j] > arr[j + 1]) { std::swap(arr[j], arr[j + 1]); swapped = true; } } if (!swapped) break; // 如果本轮未发生任何交换,则提前结束循环 } } ``` #### 折半查找 (Binary Search) 折半查找也称为二分查找法,它是在有序数组上的一种高效查找技术。该算法利用目标值与当前中间位置记录的关键字对比来缩小搜索范围直至找到匹配项或者确认不存在为止。 ```cpp int binarySearch(const int* arr, int left, int right, int target){ while(left<=right){ int mid=left+(right-left)/2; if(target==arr[mid]){ return mid; }else if(target<arr[mid]){ right=mid-1; }else{ left=mid+1; } } return -1;//表示未能查找到指定数值的位置 } ``` #### 快速排序 (Quick Sort) 作为一种高效的排序方式,快速排序采用分治策略将待排序列分割成较小子列表再分别递归调用自身直到整个表被完全排列整齐[^3]。 ```cpp void quickSort(int a[], int l, int r){ if(l >=r )return ; int first=l,last=r,key=a[first]; while(first<last){ while(first<last &&a[last]>=key)--last; if(first<last)a[first++]=a[last]; while(first<last&&a[first]<key)++first; if(first<last)a[last--]=a[first]; } a[first]=key; quickSort(a,l,first-1); quickSort(a,first+1,r); } ``` 对于实际开发过程中如何选取合适的排序方案需综合考量多方面因素如时间复杂度、空间消耗等,并依据具体情况作出最佳决策[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值