如果我有一个从0到n-1的整数排列,并且我想按升序排序置换,那么不管使用何种基于交换的排序方法,排序所需掉期数的奇偶值在所有基于交换的排序方法中都是相同的吗?
例如,考虑我下面提供的基于交换的排序方法,它是用C++编写的:
(注意:pos[i]将元素'i‘的当前索引(0 )存储在列表中)
int cnt = 0; // stores the number of operations
for (int i = 0; i < n; i++) {
if (pos[i] != i) {
cnt++;
int temp = a[i];
int
我正在尝试解决一个问题,我很难从我的拼接方法中得到答案。我试图从数组中取出所有的奇数,将它们按顺序排列,并将它们放回数组中,同时保留偶数。在我的最后一个for循环中,我尝试使用splice来获取当前奇数的索引,删除它,然后通过一个变量将排序后的奇数放回。事情不是我想要的那样发展。谢谢你能帮我的忙。
function sortArray(array) {
var odds = [];
for (var i = 0; i < array.length; i++) {
if (array[i] % 2 !== 0) {
odds.push(array[i])
现在正在上编程课,我很困惑。我们基本上需要声明一个中值方法,该方法将找到数组对象中包含的值的中值,我不知道如何在这个场景中操作它。此外,我不知道如何分离数组的碎片,也不知道如何获得数组的特定“中间块”,就像在合并排序中一样,但是我们甚至还没有接近它。
整个星期我都在努力解决这个问题。这是我所有的密码。任何提示或提示都会令人惊奇。谢谢
class ArrayIns {
private long[] a;
private int nElems; // number of data items
public ArrayIns(int max) { // constructo
我是C语言的新手,所以我很抱歉问了一些愚蠢的问题。
我需要将某些元素从一个数组复制到另一个数组中,但我无法使其工作并获得随机数。在本例中,我需要将第一个数组中最小元素之后的所有元素复制到第二个数组中。
我不能理解的另一件事是一个计算某个符号被使用了多少次的函数。我需要找出在数组中使用最大奇数位的次数。
这是我到目前为止写的代码。我希望你能理解其中的大部分:
#include <stdio.h>
#define DIM 100
int enter (int x[]);
int min (int x[], int y[], int n);
int sort (int x[], in
我无法理解解决方案背后的逻辑。如果有人能解释一下我的工作,我会非常感激的。
解决方案:
#include <bits/stdc++.h>
using namespace std;
const int N=1509;
int n;
int a[N];
void input(){
scanf("%d",&n);
for (int i=1;i<=n;i++)
scanf("%d",&a[i]);
}
void sol(){
int K=1;
for (int i=1;i<=n;
实际上,我是在教自己算法,在这里我试图解决以下问题:
我们有一个任意阶的n个正整数数组,我们有k,它是k>=1 to n,问题是输出k个最小的奇数整数。如果A中奇数数小于k,则应报告所有奇数整数。例如,如果A= 2,17,3,10,28,5,9,4,12,13,7和k= 3,输出应该是3,5,9,我想在O(n)时间内解决这个问题。
我目前的解决方案是有另一个只有奇数的数组,然后应用这个算法,通过找到中位数并将列表划分为L、中位数、右边,然后按以下方式比较k:
If |L|<k<= (|L|+|M|) Return the median
else if K<|L|, s
这种冒泡排序是我的代码的一部分,它按升序对数组进行排序,并在它们之间交换一个值。我不知道这部分代码的大O符号。如果我的数组长度是n,它是O(n)还是O(n^2)
public static int Sort(int[] b, int begin) {
boolean swapped = false;
int count1 = 0;
int temporary;
while (swapped == false) {
swapped = true;
for (int i = begin; i < b.length - 1; i+
我们如何才能最有效地做到这一点?给定具有重复项的列表,任务是在列表中重新排列项目,使两个相邻项都不相同。
Input: [1,1,1,2,3]
Output: [1,2,1,3,1]
Input: [1,1,1,2,2]
Output: [1,2,1,2,1]
Input: [1,1]
Output: Not Possible
Input: [1,1,1,1,2,3]
Output: Not Possible
编辑:一般算法也很好!它不需要是Python。
我目前正在使用一个堆结构,它被用来对数组中的数字进行排序。当我从堆中弹出(出队)一个元素时,当我想对结构进行排序时,我在代码中做了类似这样的事情。
template<typename T>
inline void dHeap<T>::reHeapDown(int root, int bottom)
{
int minChild;
int rightChild;
int leftChild;
int temp;
// Get index of root's right/left child
leftChild = root *
我有一个练习,其中我必须改进一个算法。此算法接受一个数组,并将偶数放在左侧(排序),将赔率放在右侧(未排序)。算法效率很低,所以我必须改进它。
以下是练习的原始代码,我必须“改进”:
public void what (int [] arr) {
int temp;
for (int i=0; i<arr.length; i++)
if (arr[i]%2 == 0) {
temp = arr[i];
for (int j=i; j>0; j--)
arr[j] = ar
这些牌必须以这种顺序交替,像上半部分和下半部分,直到它通过52副牌为止。每副牌的一半有26张牌,它们的顺序如下:
top1, bottom1, top2, bottom2, top3, bottom3, top4, bottom 4, ..., top n, bottom n
我正在考虑这样做:Card[] topHalf= new Card[cards.length/2];
public void shuffle() {
int index = 0;
for (int suit = 0; suit <= 1; suit++) {
for (int va
我试图从Java中的未排序数组中找到中值。首先,我需要使用选择排序技术对数组进行排序,我不能使用任何Java方法进行排序(所以没有Arrays.sort(数组))。而且,我也不能对整个数组进行排序。为了找到数组的中值,我只能根据需要对元素进行排序。我想,对于偶数数组,它只是元素的一半加上一个(然后找到最后两个元素的平均值),而对于奇数数组,它只是元素的一半(最后一个是中间值)。
因此,我不知道如何在正确的时间停止选择排序,并从最后一个或两个部分排序的数组中找到中间值。下面是我到目前为止的情况。
import java.util.Arrays;
public class EfficientMe
我对java非常陌生(两天前开始学习)。对不起,如果这是一个愚蠢的问题,我有一个练习来排序一个上升数组中的奇数。但没能解决问题。这就是我的错误。谢谢你的帮助
package Java1;
import java.util.ArrayList;
import java.util.List;
public class StringB1 {
public static void main(String[] agrs) {
int arr[] = {1,3,4,6,9,7,8,2};
for (int e : arr) {
有人能帮上忙吗。我必须写一个程序,让用户输入10个数字。并按奇数(升序)和偶数(降序)对这些数字进行排序。
例如:输入: 2,8,7,13,23,9,34,11,1,16输出: 1,7,9,11,13,23,34,16,8,2
我必须在没有任何方法的情况下这样做,比如Array.Sort。
这是我到目前为止的代码:
Console.WriteLine("Input 10 numbers: ");
int[] number = new int[10];
for (int i = 0; i < number.Length; i++) {
我正试图在一次传递中将偶数和奇数分别分离到左边和右边。此外,我希望确保这些数字按asc顺序排序,这样整个逻辑的复杂度将为O(n)。
例如,我的输入是{9,8,2,3,11,10,1};
这个逻辑我将o/p实现为{10 8 2 3 11 9 1},但我希望确保我的输出在同一遍中排序为{ 2,8,10,1,3,9,11}。
static void segregateEvenOdd(int arr[]) {
/* Initialize left and right indexes */
int left = 0, right = arr.length - 1;
while (
我知道,当使用类似于IntroSort的T[]调用时,比如Integer[] x;它将对数组进行排序,直到递归深度过大(在大多数实现中为0 ),然后它将切换到HeapSort。但是,当递归深度变为2log2n时,我试图调用一个修改的MergeSort。修改后的MergeSort只使用一个临时数组,该数组的大小是原始数组的一半,这只是为了节省一些时间和空间。无论如何,我基本上已经复制了所有的QuickSort,只是在递归调用之前添加了一个depth_limit检查。
private void quicksort(T[] items, int left, int right) {
int
正如您在我的代码中看到的,奇数是升序的,但偶数是去掉的。我想让偶数留在原来的位置。预期的日志将为[1, 3, 2, 8, 5, 4]
function sortArray(array) {
let sortedNumbers = array.sort();
let newArray = [];
for (let i = 0; i < sortedNumbers.length; i++) {
if (sortedNumbers[i] % 2 !== 0) {
newArray.push(sortedNumbers[i]);
}
}
ret