找到数组中第几个最小的数据

找到数组中第几个最小的数据 将经典的快速排序算法做简单修改即可

示例代码如下:

void testFindSpecificMin(){
    int arr[] = {2, 4, 3, 9, 6, 5, 7, 0, 2, 1};
    //int arr[] = {4, 2, 9};
    //int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};

    int position = 2;
    findSpecificMin(arr, sizeof(arr)/sizeof(int), position - 1, 0);

    printf("\n");
    for (int i = 0; i < sizeof(arr)/sizeof(int); i++) {
        printf("arr is %d\n", arr[i]);
    }

    printf("min is %d\n", arr[position - 1]);

    for (int i = 1; i <= sizeof(arr)/sizeof(int); i++) {

        int position = i;
        findSpecificMin(arr, sizeof(arr)/sizeof(int), position - 1, 0);
        printf("min is %d\n", arr[position - 1]);
    }

}

/** 
 * currentPivot 当前枢纽元的位置
 * specificMin 第几个最小的数
 */
void findSpecificMin(int arr[], int length, int specificMin, int currentPivot){

    if (length <= 1) {
        return;
    }

    if (length == 2) {
        if (arr[0] > arr[1]) {
            swap(arr, arr + 1);
        }
        return;
    }

    int center = (length - 1) / 2;

    if (arr[0] > arr[length - 1]) {
        swap(arr, arr + length - 1);
    }
    if (arr[0] > arr[center]) {
        swap(arr, arr + center);
    }
    if (arr[center] > arr[length - 1]) {
        swap(arr + center, arr + length - 1);
    }

    swap(arr + center, arr + length - 1);

    int pivotElement = arr[length - 1];

    int leftp = 0;
    int rightp = length - 1;

    while (1) {
        while (arr[--rightp] > pivotElement) {

        }
        while (arr[++leftp] < pivotElement) {

        }
        if (rightp > leftp) {
            swap(arr + rightp, arr + leftp);
        }else{
            break;
        }
    }

    swap(arr + leftp, arr + length - 1);

    printf("\n");
    for (int i = 0; i < length; i++) {
        printf("arr is %d\n", arr[i]);
    }

    if (currentPivot + leftp <= specificMin) {
        findSpecificMin(arr + leftp, length - leftp, specificMin, currentPivot + leftp);
    }else{
        findSpecificMin(arr, leftp, specificMin, currentPivot);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要删除一个数组中的一个元素,可以使用编程语言提供的相关方法或函数,一般包括以下步骤: 1. 找到需要删除的元素在数组中的位置或索引。 2. 使用数组的删除方法或函数,将该位置的元素删除。 3. 如果需要,调整数组中其他元素的位置,以保证数组的连续性。 具体实现方式因编程语言而异。常用的编程语言(如Python、Java、C++等)中,均提供了删除数组元素的相关方法或函数。例如,Python 中可以使用 `del` 关键字或 `pop()` 方法删除数组元素;Java 中可以使用 `System.arraycopy()` 方法将后面的元素向前移动,然后使用 `Arrays.copyOf()` 方法创建一个新数组来删除最后一个元素;C++ 中可以使用 `std::vector` 类的 `erase()` 方法删除指定位置的元素。 需要注意的是,在一些编程语言中,数组的长度是固定的,无法直接删除元素,因此需要使用其他数据结构(如链表)来实现删除元素的操作。 ### 回答2: 删除数组中的一个元素可以通过以下步骤实现: 1. 找到要删除的元素的索引。可以使用循环遍历整个数组,逐个比较元素的值,直到找到要删除的元素。 2. 一旦找到要删除的元素的索引,可以使用数组的切片操作来删除元素。将要删除的元素之前的部分和之后的部分重新连接起来,形成一个新的数组。 3. 最后,要记得更新数组的长度或者修改数组的指针位置,以确保数组的正确性。 这是一个简单的例子: ```python # 定义一个包含元素的数组 arr = [1, 2, 3, 4, 5] # 定义要删除的元素的索引 index_to_delete = 2 # 使用切片操作删除元素 new_arr = arr[:index_to_delete] + arr[index_to_delete+1:] # 输出新的数组 print(new_arr) ``` 这个例子中,我们删除了索引为2的元素,即数组中的第3个元素。最后输出的`new_arr`为`[1, 2, 4, 5]`。 当然,还有其他一些删除数组元素的方法和技巧,具体使用哪种方法取决于编程语言和数据结构的细节。 ### 回答3: 要删除数组中的一个元素,我们需要知道该元素的索引位置。删除一个元素的方法有以下几种: 1. 使用splice方法:splice方法可以删除数组中的一个或多个元素,并返回这些被删除元素组成的新的数组。它接受两个参数,第一个参数表示要删除的起始位置,第二个参数表示要删除的元素个数。例如,要删除数组arr中的第i个元素,可以使用arr.splice(i, 1)。 2. 使用delete关键字:delete关键字可以删除数组中指定索引位置的元素,但不会调整数组的长度。删除元素后,会在数组中留下一个空洞。例如,要删除数组arr中的第i个元素,可以使用delete arr[i]。 3. 使用filter方法:filter方法可以根据指定的条件创建一个新的数组,原数组中符合条件的元素将会被保留下来。可以通过设置条件来排除需要删除的元素。例如,要删除数组arr中的第i个元素,可以使用arr.filter((_, index) => index !== i)。 需要注意的是,以上三种方法都会改变原数组。如果不想修改原数组,可以使用slice方法创建一个新的数组,并在新数组中排除需要删除的元素。例如,要删除数组arr中的第i个元素,可以使用arr.slice(0, i).concat(arr.slice(i+1))。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值