将一个数组分成几个同等长度权的数组

本文介绍了一种使用JavaScript将数组分割成多个子数组的方法,每个子数组具有相同的长度。通过简单的循环和slice方法,可以轻松地实现数组的均匀分割,这对于处理大量数据集尤其有用。

/*
 * 将一个数组分成几个同等长度权的数组
 * array[分割的原数组]
 * size[每个子数组的长度]
 */function sliceArray(array, size) {
    var result = [];
    for (var x = 0; x < Math.ceil(array.length / size); x++) {
        var start = x * size;
        var end = start + size;
        result.push(array.slice(start, end));
    }
    return result;
}

下面代码出现错误,请你分析帮我纠错改正,但是不要改变代码变量:import random import tkinter # 导入图形库 import math # 导入数学库 result=0 class Calculator: # 类的构造函数 ans=result def __init__(self): myWindow = tkinter.Tk() # 创建窗体 myWindow.title("三角形面积") # 设置窗体的标题栏 # 变量初值为0 self.v1 = tkinter.StringVar(value='0') self.v2 = tkinter.StringVar(value='0') self.v3 = tkinter.StringVar(value='0') self.v4 = tkinter.StringVar(value='0') # 布局输入模块 myFrame1 = tkinter.Frame(myWindow) myFrame1.grid(row=1, column=1, pady=10) # 放到窗体的1行1列,上下间隔10像素 tkinter.Label(myFrame1, text="数组长度").pack(side='left') tkinter.Entry(myFrame1, width=5, textvariable=self.v1, justify='right').pack(side='left') tkinter.Label(myFrame1, text="数组").pack(side='left') tkinter.Entry(myFrame1, width=5, textvariable=self.v2, justify='right').pack(side='left') tkinter.Label(myFrame1, text="第K小").pack(side='left') tkinter.Entry(myFrame1, width=5, textvariable=self.v3, justify='right').pack(side='left') # 布局输出模块 myFrame2 = tkinter.Frame(myWindow) myFrame2.grid(row=2, column=1, pady=10) # 放到窗体的2行1列,上下间隔10像素 tkinter.Button(myFrame2, text="结果", command=self.calcArea).pack(side='left') # 输出面积。因为Lable无法让用户复制运算结果,所以改用Entry文本框。 tkinter.Entry(myFrame2, width=20, textvariable=self.v4, justify='right').pack(side='right') # 交换两个元素 def swap(self,a, b): temp = a a = b b = temp return a, b # 选择排序 def select_sort(self,a, p, r): for i in range(p, r): index = i for j in range(i + 1, r + 1): if a[j] < a[index]: index = j a[i], a[index] = swap(a[i], a[index]) # 将x作为基准数将数组分割,返回x的位置 def partition(self,a, p, r, x): i = p - 1 #i指向首元素的前一个位置 j = r + 1 #j指向尾元素的后一个位置 while True: while a[i + 1] < x and i < r: #i从基准数右边的元素开始找,直到找到第一个大于等于基准数的元素 i += 1 while a[j - 1] > x and j > p: #j从尾元素开始找,直到找到第一个小于等于基准数的元素 j -= 1 if i >= j: #若i>=j,说明基准数的位置已找到,为j break a[i], a[j] = swap(a[i], a[j]) #交换两个元素,使得基准数左边的数均不大于它,右边的数均不小于它 return j #返回基准数的位置 # 找每组的中位数,返回中位数的位置i def search_mid(self,a, p, r): b = a[p:r+1] #建立与数组a同等大小数组b,用数组b存放数组a(注意此时b的首地址为0,而a的首地址为p) select_sort(b, 0, len(b) - 1) #将数组b排序,b[(r-p+1)/2]为中位数 mid = b[(r - p + 1) // 2] for i in range(p, r + 1): if a[i] == mid: return i return 0 # 线性划分 def select(self,a, p, r, k): if r - p < 5: select_sort(a, p, r) return a[p + k - 1] # 分成n/5组,每组5个,找到每组的中位数并将它放到数组首元素的位置 for i in range((r - p - 4) // 5 + 1): mid = search_mid(a, p + 5 * i, p + 5 * i + 4) a[p + i], a[mid] = swap(a[p + i], a[mid]) # 找到各组中位数的中位数 x = select(a, p, p + (r - p - 4) // 5, (r - p - 4) // 10 + 1) # 按照中位数划分 i = partition(a, p, r, x) #求较小数数组长度 len_group = i - p + 1 #若较小数数组长度小于等于k,说明第k小的元素在这个数组内,将其递归 if k <= len_group: return select(a, p, i, k) else: # //否则,说明第k小的元素在较大数数组,将其递归 return select(a, i + 1, r, k - len_group) def calcArea(self): n = eval(self.v1.get()) a = eval(self.v2.get()) k = eval(self.v3.get()) result = select(a, 0, n - 1, k) self.v4=result # 启动窗体,等待输入。 tkinter.mainloop() if __name__ == "__main__": Calculator()
最新发布
06-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值