题目描述:
题目入口:
力扣leetcode-cn.com通过截图:
解题思路:
- 冒泡排序为基础的解题思路:合并数组,冒泡排序算法,求中位数[见通过截图一,代码一]
- 选择排序为基础的解题思路:每次循环取两数组中最小的值,加入缓冲数组,把该值从两数组删除,继续循环,直到排序完成,求中位数[见通过截图二,代码二]
- 插入排序(Insertion Sort)为基础的解题思路:将数组合并,插入排序算法(依次取出第二个数组元素顺序从前比对第一个数组元素,遇到比它大的就插进去,循环),求中位数[通过截图见图三,代码三]
- ...[关于其余排序算法待实现]
实现代码:[使用冒泡排序--解的时候还以为时间会超时,没想到过去了哈哈。其余排序算法代码之后更新]
class Solution {
func findMedianSortedArrays(_ nums1: [Int], _ nums2: [Int]) -> Double {
var buffArray = [Int]()
var nu1 = nums1.count
let nu2 = nums2.count
var medianNum: Double = 0
var cup=0
//排序算法:冒泡
buffArray=nums1+nums2
for i in 0 ..< nu1+nu2{
for j in 0 ..< nu1+nu2{
if buffArray[i] < buffArray[j]{
var cup = buffArray[i]
buffArray[i]=buffArray[j]
buffArray[j] = cup
}
}
}
//中位数计算:此处基本没问题
var num=0
if (nu1+nu2)%2==1 {//奇数
nu1 = (nu2+nu1-1)/2
num = buffArray[nu1]
medianNum = Double(num)
}
else{//偶数
nu1 = (nu1+nu2)/2
num = buffArray[nu1-1]+buffArray[nu1]
medianNum = Double(num)/2
}
return medianNum
}
}
代码二:[选择排序]
class Solution {
func findMedianSortedArrays(_ nums1: [Int], _ nums2: [Int]) -> Double {
var buffArray = [Int]()
var medianNum: Double = 0
var bufnum1=nums1
var bufnum2=nums2
//排序算法:选择排序
for _ in 0 ..< nums1.count+nums2.count{
if bufnum1.isEmpty{
buffArray=buffArray+bufnum2
bufnum2.removeAll()
}
else{
if bufnum2.isEmpty{
buffArray=buffArray+bufnum1
bufnum1.removeAll()
}
else{
if !bufnum2.isEmpty && !bufnum1.isEmpty{
let min1: Int = bufnum1.first!
let min2: Int = bufnum2.first!
if(min1<min2){
buffArray.append(min1)
bufnum1.removeFirst()
}
else{
buffArray.append(min2)
bufnum2.removeFirst()
}
}
}
}
}
//中位数计算:此处基本没问题
var num=0
if (nums1.count+nums2.count)%2==1 {//奇数
let nu1 = (nums1.count+nums2.count-1)/2
num = buffArray[nu1]
medianNum = Double(num)
}
else{//偶数
let nu1 = (nums1.count+nums2.count)/2
num = buffArray[nu1-1]+buffArray[nu1]
medianNum = Double(num)/2
}
return medianNum
}
}
代码三:插入排序算法
class Solution {
func findMedianSortedArrays(_ nums1: [Int], _ nums2: [Int]) -> Double {
var buffArray = [Int]()
var medianNum: Double = 0
//排序算法:插入排序
buffArray = nums1+nums2//合并,此时buff长为n+m,从第m个从头排起
for i in 0 ..< nums2.count{
for j in i ..< nums1.count+nums2.count{
if buffArray[j] >= nums2[i]{
buffArray.insert(nums2[i], at: j)
buffArray.remove(at: i+nums1.count+1)
break;
}
}
}
//中位数计算:此处基本没问题
var num=0
if (nums1.count+nums2.count)%2==1 {//奇数
let nu1 = (nums1.count+nums2.count-1)/2
num = buffArray[nu1]
medianNum = Double(num)
}
else{//偶数
let nu1 = (nums1.count+nums2.count)/2
num = buffArray[nu1-1]+buffArray[nu1]
medianNum = Double(num)/2
}
return medianNum
}
}