Files
Go-http_framework/util/search/LomutoPartition_test.go
T

175 lines
28 KiB
Go
Raw Normal View History

/*
* @Author : huangzj
* @Time : 2020/8/18 14:54
* @Description
*/
package search
import (
"fmt"
"testing"
)
func TestPartition(t *testing.T) {
list := []int{99, 1, 2, 3, 4, 100, 200, 90, 5}
2021-02-23 10:57:41 +08:00
for i := 1; i <= len(list); i++ {
s := LomutoPartition(list, 0, len(list)-1)
fmt.Println()
fmt.Println(fmt.Sprintf("当前第一个元素应该存在位置为:%d", s))
for _, r := range list {
fmt.Print(r, " ")
}
}
fmt.Println()
for i := 1; i <= len(list); i++ {
num, _, _ := LomutoQuiteSelect(list, i)
fmt.Println(fmt.Sprintf("第%d个位置的数是:%d", i, num))
}
2021-02-23 10:57:41 +08:00
for i := 0; i < len(list); i++ {
fmt.Println(list[i])
}
2021-02-23 10:57:41 +08:00
}
func doc() string {
return `
这边对从前到后查找(第1、2、3、4...大的元素)和从后到前进行查找(第5、4、3、2、1)进行对比,发现从后到前进行查找所做的划分和交换元素操作,在元素多的情况下,效率来的更好,下面是计算的结果.
【倒序和正序排,无序都对划分次数有影响,正序排的查找效率一致】
查找指定数量的第几大元素的效率比较
从第一大元素开始查找总共进行了20次划分操作,实际进行交换的次数为:36
从第一大元素开始查找总共进行了6次划分操作,实际进行交换的次数为:22
从第一大元素开始查找总共进行了45次划分操作,实际进行交换的次数为:45
从第一大元素开始查找总共进行了45次划分操作,实际进行交换的次数为:45
从第一大元素开始查找总共进行了76次划分操作,实际进行交换的次数为:118
从第一大元素开始查找总共进行了49次划分操作,实际进行交换的次数为:91
从第一大元素开始查找总共进行了323次划分操作,实际进行交换的次数为:538
从第一大元素开始查找总共进行了215次划分操作,实际进行交换的次数为:430
从第一大元素开始查找总共进行了2004次划分操作,实际进行交换的次数为:2133
从第一大元素开始查找总共进行了1318次划分操作,实际进行交换的次数为:1447
从第一大元素开始查找总共进行了256523次划分操作,实际进行交换的次数为:260330
从第一大元素开始查找总共进行了173214次划分操作,实际进行交换的次数为:177021
接下来查找所有的第几大元素的效率比较
从第一大元素开始查找总共进行了45次划分操作,实际进行交换的次数为:45
从第一大元素开始查找总共进行了45次划分操作,实际进行交换的次数为:45
从第一大元素开始查找总共进行了78次划分操作,实际进行交换的次数为:78
从第一大元素开始查找总共进行了78次划分操作,实际进行交换的次数为:78
从第一大元素开始查找总共进行了91次划分操作,实际进行交换的次数为:91
从第一大元素开始查找总共进行了91次划分操作,实际进行交换的次数为:91
从第一大元素开始查找总共进行了7129次划分操作,实际进行交换的次数为:7254
从第一大元素开始查找总共进行了4925次划分操作,实际进行交换的次数为:5050
从第一大元素开始查找总共进行了5229次划分操作,实际进行交换的次数为:5278
从第一大元素开始查找总共进行了4046次划分操作,实际进行交换的次数为:4095
从第一大元素开始查找总共进行了661499次划分操作,实际进行交换的次数为:663080
从第一大元素开始查找总共进行了498919次划分操作,实际进行交换的次数为:500500
`
}
func TestLomutoQuiteSelect(t *testing.T) {
fmt.Println("查找指定数量的第几大元素的效率比较")
list := []int{99, 1, 2, 3, 4, 100, 200, 90, 5}
list1 := []int{99, 1, 2, 3, 4, 100, 200, 90, 5}
compareCalculate(list, list1, 5) //比较运算的效率
fmt.Println()
list2 := []int{1, 2, 3, 4, 5, 100, 200, 900, 50000, 444444, 8888888, 999999999}
list21 := []int{1, 2, 3, 4, 5, 100, 200, 900, 50000, 444444, 8888888, 999999999}
compareCalculate(list2, list21, 9) //比较运算的效率
fmt.Println()
list3 := []int{954439, 12345, 4444, 3333, 444, 222, 200, 90, 9, 6, 3, 2, 1}
list31 := []int{954439, 12345, 4444, 3333, 444, 222, 200, 90, 9, 6, 3, 2, 1}
compareCalculate(list3, list31, 10) //比较运算的效率
fmt.Println()
list4 := []int{1372, 6643, 3149, 7378, 6580, 5016, 6030, 7226, 6659, 3502, 8363, 7786, 7416, 446, 414, 9320, 2176, 2226, 2371, 2159, 3648, 9900, 4294, 5036, 2623, 4808, 5086, 5199, 2757, 7443, 4569, 3762, 4738, 9354, 2029, 1121, 2453, 9886, 5692, 8417, 8653, 2990, 5626, 7075, 6146, 354, 3723, 1762, 830, 4497, 2940, 2951, 8795, 5197, 3905, 1790, 4998, 6102, 3587, 7014, 8304, 4607, 3733, 5440, 6798, 4981, 2492, 7497, 9571, 1995, 8285, 6017, 2326, 9343, 7609, 5364, 441, 9367, 5623, 3203, 3113, 2255, 8131, 8859, 3806, 5460, 667, 3929, 3321, 801, 1103, 1222, 1940, 2101, 1190, 7264, 2370, 5236, 5150, 5169}
list41 := []int{1372, 6643, 3149, 7378, 6580, 5016, 6030, 7226, 6659, 3502, 8363, 7786, 7416, 446, 414, 9320, 2176, 2226, 2371, 2159, 3648, 9900, 4294, 5036, 2623, 4808, 5086, 5199, 2757, 7443, 4569, 3762, 4738, 9354, 2029, 1121, 2453, 9886, 5692, 8417, 8653, 2990, 5626, 7075, 6146, 354, 3723, 1762, 830, 4497, 2940, 2951, 8795, 5197, 3905, 1790, 4998, 6102, 3587, 7014, 8304, 4607, 3733, 5440, 6798, 4981, 2492, 7497, 9571, 1995, 8285, 6017, 2326, 9343, 7609, 5364, 441, 9367, 5623, 3203, 3113, 2255, 8131, 8859, 3806, 5460, 667, 3929, 3321, 801, 1103, 1222, 1940, 2101, 1190, 7264, 2370, 5236, 5150, 5169}
compareCalculate(list4, list41, 20) //比较运算的效率
fmt.Println()
list5 := []int{279, 522, 383, 835, 399, 973, 910, 81, 236, 518, 671, 466, 387, 907, 453, 25, 740, 972, 147, 384, 979, 181, 885, 119, 425, 367, 56, 532, 983, 660, 2253, 4453, 3345, 1792, 6411, 5769, 4247, 5799, 2118, 3006, 3350, 4239, 2052, 3712, 4815, 4283, 4748, 5704, 2089, 3323, 1764, 3314, 5451, 5088, 3757, 5429, 6031, 2456, 2159, 3634, 3950, 3344, 3837, 3481, 2515, 6120, 4085, 5602, 3142, 4976, 1781, 2356, 2680, 2614, 6098, 5086, 2914, 4388, 6075, 3552, 1737, 6107, 5423, 2147, 4997, 3136, 2300, 2023, 5774, 2984}
list51 := []int{279, 522, 383, 835, 399, 973, 910, 81, 236, 518, 671, 466, 387, 907, 453, 25, 740, 972, 147, 384, 979, 181, 885, 119, 425, 367, 56, 532, 983, 660, 2253, 4453, 3345, 1792, 6411, 5769, 4247, 5799, 2118, 3006, 3350, 4239, 2052, 3712, 4815, 4283, 4748, 5704, 2089, 3323, 1764, 3314, 5451, 5088, 3757, 5429, 6031, 2456, 2159, 3634, 3950, 3344, 3837, 3481, 2515, 6120, 4085, 5602, 3142, 4976, 1781, 2356, 2680, 2614, 6098, 5086, 2914, 4388, 6075, 3552, 1737, 6107, 5423, 2147, 4997, 3136, 2300, 2023, 5774, 2984}
compareCalculate(list5, list51, 50) //比较运算的效率
fmt.Println()
list6 := []int{84132644, 5469898, 64964811, 52855612, 71835648, 66037842, 96619260, 4920751, 75675691, 87894175, 4099049, 66385290, 55610311, 19818490, 43168996, 19146022, 56822923, 21902576, 22890253, 97967501, 84353387, 64315107, 32650209, 42110303, 94023093, 68052802, 15619862, 94421293, 634227, 77639259, 33928970, 95492545, 92710338, 28996582, 56905484, 54892736, 23116923, 20549503, 14783750, 74517844, 41338245, 31622350, 40636055, 94865731, 72727755, 40383450, 96526036, 74873916, 42873385, 16248077, 1366555, 4895078, 78633919, 19759975, 88923373, 62908758, 10394245, 76254857, 19794831, 72474113, 61660644, 17396571, 90313620, 92599297, 36473555, 72834266, 10707390, 87435905, 35193462, 84554559, 43771061, 68946538, 66690372, 84783929, 5591780, 19546017, 85658762, 6569031, 97892481, 76925793, 78507067, 88801048, 27858380, 47662249, 41006865, 98079672, 50965012, 25315673, 42791057, 41796878, 13328370, 42326892, 85450822, 51728880, 66757466, 45015301, 13457825, 82660751, 18104318, 39933247, 81906268, 28305906, 30736747, 65055358, 67835916, 38117546, 21041659, 55741410, 17053631, 10568396, 9398015, 39064051, 49793102, 24623903, 24818749, 67751466, 18286044, 43412285, 69126326, 82794491, 57464456, 51503068, 38973524, 75861914, 20467309, 86916932, 80045380, 55052826, 37459426, 22803310, 52111447, 71252008, 73866288, 10411519, 60271279, 39338010, 47488981, 82593864, 24480425, 74811215, 27257094, 22072269, 30994308, 18528210, 99826856, 61231979, 31565866, 24966442, 61393936, 58954539, 34863588, 87055659, 15340577, 76862807, 21485387, 27090777, 19180599, 39776166, 76190567, 55851843, 53162811, 43949745, 25935876, 35466508, 54234707, 15408880, 60185895, 48142405, 18571320, 21467296, 63244327, 24509789, 34426834, 44179807, 51861433, 56436967, 12424716, 9741402, 60982451, 62429601, 69296138, 70829088, 72535053, 80963078, 41312477, 98155892, 16209335, 54424515, 7919684, 19484956, 4129373, 85222263, 47925458, 88500005, 40216159, 9535874, 61090958, 59965894, 79008184, 45877959, 92334116, 21544730, 99718270, 72197309, 43462356, 24972097, 48416571, 57909933, 26336012, 83327474, 3088868, 67412130, 37947541, 31229124, 7046699, 45590012, 16414642, 7395623, 26984459, 73576795, 6354268, 70698360, 44971763, 27468805, 93997620, 752937, 83317090, 24373257, 60049482, 33327066, 16696062, 22561776, 27653851, 60227752, 86009792, 2130744, 62405472, 27072294, 67666364, 89858424, 13930856, 74187721, 63916662, 12528862, 62358511, 47921546, 41100867, 22346894, 39672160, 47223490, 77679476, 98436281, 44752260, 9627613, 36962786, 90374825, 78160571, 93883360, 56599240, 68298483, 97824296, 33634055, 22370600, 24917599, 26476359, 45206555, 8655136, 39869476, 13225506, 4784679, 86815112, 61270420, 48807361, 3037439, 34771044, 62258490, 33225533, 23860708, 71731923, 95100996, 76190767, 98025225, 43041801, 20275329, 61996638, 62990622, 68558294, 77564579, 41759022, 58648433, 14777242, 1588346, 40198753, 58992660, 74827261, 96181858, 7949854, 46651629, 23863375, 90963908, 15431493, 97304699, 52442824, 63181432, 72108348, 42415524, 18694990, 55690341, 53029822, 98285309, 69893143, 32380047, 21211578, 66276323, 13767870, 2453580, 48309591, 32793420, 68856483, 6144865, 32493766, 14443307, 16558615, 56173364, 46851157, 76531929, 72510123, 69974007, 62739062, 74678951, 16086537, 99021589, 25885455, 56937378, 4489978, 60649569, 78615888, 2647557, 64643320, 46802274, 5060208, 52617399, 27228033, 17984602, 20410049, 10002884, 52047448, 49118954, 27172559, 77743658, 66508384, 49729558, 62387046, 63365051, 28587175, 72112685, 38120110, 33911020, 3572602, 32495422, 8643623, 76492500, 76597483, 7356010, 11285891, 18298965, 73230149, 16527596, 54463913, 13391623, 75671670, 53202182, 60871134, 99413657, 40638194, 88093741, 45892108, 89677287, 42571709, 8599376, 9650823, 3461853, 10210211, 82719297, 73314803, 83175887, 81356827, 66541224, 27386335, 53458610, 31938735, 77062829, 52219963, 4634629, 2195329, 45936189, 93510890, 63097827, 27608052, 87854353, 1742573, 76324965, 66505791, 52248896, 44098710, 23650860, 98924462, 3148221, 65419911, 88229491, 20391451, 38974763, 2
list61 := []int{84132644, 5469898, 64964811, 52855612, 71835648, 66037842, 96619260, 4920751, 75675691, 87894175, 4099049, 66385290, 55610311, 19818490, 43168996, 19146022, 56822923, 21902576, 22890253, 97967501, 84353387, 64315107, 32650209, 42110303, 94023093, 68052802, 15619862, 94421293, 634227, 77639259, 33928970, 95492545, 92710338, 28996582, 56905484, 54892736, 23116923, 20549503, 14783750, 74517844, 41338245, 31622350, 40636055, 94865731, 72727755, 40383450, 96526036, 74873916, 42873385, 16248077, 1366555, 4895078, 78633919, 19759975, 88923373, 62908758, 10394245, 76254857, 19794831, 72474113, 61660644, 17396571, 90313620, 92599297, 36473555, 72834266, 10707390, 87435905, 35193462, 84554559, 43771061, 68946538, 66690372, 84783929, 5591780, 19546017, 85658762, 6569031, 97892481, 76925793, 78507067, 88801048, 27858380, 47662249, 41006865, 98079672, 50965012, 25315673, 42791057, 41796878, 13328370, 42326892, 85450822, 51728880, 66757466, 45015301, 13457825, 82660751, 18104318, 39933247, 81906268, 28305906, 30736747, 65055358, 67835916, 38117546, 21041659, 55741410, 17053631, 10568396, 9398015, 39064051, 49793102, 24623903, 24818749, 67751466, 18286044, 43412285, 69126326, 82794491, 57464456, 51503068, 38973524, 75861914, 20467309, 86916932, 80045380, 55052826, 37459426, 22803310, 52111447, 71252008, 73866288, 10411519, 60271279, 39338010, 47488981, 82593864, 24480425, 74811215, 27257094, 22072269, 30994308, 18528210, 99826856, 61231979, 31565866, 24966442, 61393936, 58954539, 34863588, 87055659, 15340577, 76862807, 21485387, 27090777, 19180599, 39776166, 76190567, 55851843, 53162811, 43949745, 25935876, 35466508, 54234707, 15408880, 60185895, 48142405, 18571320, 21467296, 63244327, 24509789, 34426834, 44179807, 51861433, 56436967, 12424716, 9741402, 60982451, 62429601, 69296138, 70829088, 72535053, 80963078, 41312477, 98155892, 16209335, 54424515, 7919684, 19484956, 4129373, 85222263, 47925458, 88500005, 40216159, 9535874, 61090958, 59965894, 79008184, 45877959, 92334116, 21544730, 99718270, 72197309, 43462356, 24972097, 48416571, 57909933, 26336012, 83327474, 3088868, 67412130, 37947541, 31229124, 7046699, 45590012, 16414642, 7395623, 26984459, 73576795, 6354268, 70698360, 44971763, 27468805, 93997620, 752937, 83317090, 24373257, 60049482, 33327066, 16696062, 22561776, 27653851, 60227752, 86009792, 2130744, 62405472, 27072294, 67666364, 89858424, 13930856, 74187721, 63916662, 12528862, 62358511, 47921546, 41100867, 22346894, 39672160, 47223490, 77679476, 98436281, 44752260, 9627613, 36962786, 90374825, 78160571, 93883360, 56599240, 68298483, 97824296, 33634055, 22370600, 24917599, 26476359, 45206555, 8655136, 39869476, 13225506, 4784679, 86815112, 61270420, 48807361, 3037439, 34771044, 62258490, 33225533, 23860708, 71731923, 95100996, 76190767, 98025225, 43041801, 20275329, 61996638, 62990622, 68558294, 77564579, 41759022, 58648433, 14777242, 1588346, 40198753, 58992660, 74827261, 96181858, 7949854, 46651629, 23863375, 90963908, 15431493, 97304699, 52442824, 63181432, 72108348, 42415524, 18694990, 55690341, 53029822, 98285309, 69893143, 32380047, 21211578, 66276323, 13767870, 2453580, 48309591, 32793420, 68856483, 6144865, 32493766, 14443307, 16558615, 56173364, 46851157, 76531929, 72510123, 69974007, 62739062, 74678951, 16086537, 99021589, 25885455, 56937378, 4489978, 60649569, 78615888, 2647557, 64643320, 46802274, 5060208, 52617399, 27228033, 17984602, 20410049, 10002884, 52047448, 49118954, 27172559, 77743658, 66508384, 49729558, 62387046, 63365051, 28587175, 72112685, 38120110, 33911020, 3572602, 32495422, 8643623, 76492500, 76597483, 7356010, 11285891, 18298965, 73230149, 16527596, 54463913, 13391623, 75671670, 53202182, 60871134, 99413657, 40638194, 88093741, 45892108, 89677287, 42571709, 8599376, 9650823, 3461853, 10210211, 82719297, 73314803, 83175887, 81356827, 66541224, 27386335, 53458610, 31938735, 77062829, 52219963, 4634629, 2195329, 45936189, 93510890, 63097827, 27608052, 87854353, 1742573, 76324965, 66505791, 52248896, 44098710, 23650860, 98924462, 3148221, 65419911, 88229491, 20391451, 38974763,
compareCalculate(list6, list61, 590) //比较运算的效率
fmt.Println()
fmt.Println("接下来查找所有的第几大元素的效率比较")
compareCalculateWithAll(list, list1)
fmt.Println()
compareCalculateWithAll(list2, list21)
fmt.Println()
compareCalculateWithAll(list3, list31)
fmt.Println()
compareCalculateWithAll(list4, list41)
fmt.Println()
compareCalculateWithAll(list5, list51)
fmt.Println()
compareCalculateWithAll(list6, list61)
}
func compareCalculateWithAll(list []int, list1 []int) {
var times, charges int
for k := 1; k <= len(list); k++ {
_, time, charge := LomutoQuiteSelect(list, k)
//fmt.Println(fmt.Sprintf("当前第%d个小的元素是:%d", k, s))
times = times + time
charges = charges + charge
//fmt.Println()
}
fmt.Println(fmt.Sprintf("从第一大元素开始查找总共进行了%d次划分操作,实际进行交换的次数为:%d", times, charges))
times = 0
charges = 0
for k := len(list1); k >= 1; k-- {
_, time, _ := LomutoQuiteSelect(list1, k)
//fmt.Println(fmt.Sprintf("当前第%d个小的元素是:%d", k, s))
times = times + time
charges = charges + charge
//fmt.Println()
}
fmt.Println(fmt.Sprintf("从第一大元素开始查找总共进行了%d次划分操作,实际进行交换的次数为:%d", times, charges))
}
func compareCalculate(list []int, list1 []int, num int) {
var times, charges int
for k := 1; k <= num; k++ {
_, time, charge := LomutoQuiteSelect(list, k)
//fmt.Println(fmt.Sprintf("当前第%d个小的元素是:%d", k, s))
times = times + time
charges = charges + charge
//fmt.Println()
}
fmt.Println(fmt.Sprintf("从第一大元素开始查找总共进行了%d次划分操作,实际进行交换的次数为:%d", times, charges))
times = 0
charges = 0
for k := num; k >= 1; k-- {
_, time, _ := LomutoQuiteSelect(list1, k)
//fmt.Println(fmt.Sprintf("当前第%d个小的元素是:%d", k, s))
times = times + time
charges = charges + charge
//fmt.Println()
}
fmt.Println(fmt.Sprintf("从第一大元素开始查找总共进行了%d次划分操作,实际进行交换的次数为:%d", times, charges))
}