diff --git a/readme.md b/readme.md index f612491..7d8cc00 100644 --- a/readme.md +++ b/readme.md @@ -52,6 +52,8 @@ 2020/10/28: 新增根据二进制位数来存储奖励领取情况工具类,BitStoreTool、使用说明及其单测 +2020/11/9: 新增lomute划分算法效率单测,结果:多次查找,元素多的情况下由末尾开始查找效率更高 + # mod vendor模式加载包 通过go mod的方式加载的github上面的包会有报红的问题,但是包本身是可以运行的,这样就是会有一个问题,如果你想要点击去看方法的内容,没办法做到 diff --git a/util/bitStore/BitStoreTool.go b/util/bitStore/BitStoreTool.go index d4f89a9..2f08ad1 100644 --- a/util/bitStore/BitStoreTool.go +++ b/util/bitStore/BitStoreTool.go @@ -51,7 +51,7 @@ func (bitStore *BitStore) IsGearReceive(gear int) bool { return false } position := bitStore.getGearPosition(gear, length) - return (bitStore.GearPickList[length-1] & (2 << position)) > 0 + return (bitStore.GearPickList[length-1] & (1 << position)) > 0 } //获取对应档位奖励 @@ -59,7 +59,7 @@ func (bitStore *BitStore) ReceiveByGear(gear int) ([]int, map[int]bool) { bitStore.checkIfReceive(gear) //校验是否被领取了 length := bitStore.dynamicGrowth(gear) //数组进行动态增长 position := bitStore.getGearPosition(gear, length) //获取档位在数组中的位数位置 - bitStore.GearPickList[length-1] = bitStore.GearPickList[length-1] + (2 << uint(position)) + bitStore.GearPickList[length-1] = bitStore.GearPickList[length-1] + (1 << uint(position)) return bitStore.GearPickList, bitStore.FindAllGearMap() } @@ -91,7 +91,7 @@ func (bitStore *BitStore) fullListDeal(listSize int, length int) map[int]bool { resultMap := make(map[int]bool, 0) for i := 0; i < length; i++ { for j := 0; j < bit && bitStore.MaxGear > i*bit+j; j++ { - resultMap[i*bit+j+1] = (bitStore.GearPickList[i] & (2 << uint(j))) > 0 + resultMap[i*bit+j+1] = (bitStore.GearPickList[i] & (1 << uint(j))) > 0 } } return resultMap @@ -101,7 +101,7 @@ func (bitStore *BitStore) shortListDeal(listSize, length int) map[int]bool { resultMap := make(map[int]bool, 0) for i := 0; i < listSize; i++ { for j := 0; j < bit; j++ { - resultMap[i*bit+j+1] = (bitStore.GearPickList[i] & (2 << uint(j))) > 0 + resultMap[i*bit+j+1] = (bitStore.GearPickList[i] & (1 << uint(j))) > 0 } } for i := listSize; i < length; i++ { diff --git a/util/search/LomutoPartition.go b/util/search/LomutoPartition.go index 596c10c..ebc2296 100644 --- a/util/search/LomutoPartition.go +++ b/util/search/LomutoPartition.go @@ -6,6 +6,11 @@ package search +var ( + times = 0 //用来计算一次划分进行了多少次的比较操作 + charge = 0 //实际进行元素交换的次数 +) + //参数说明: //list :数组 //start : 开始比较的数字下标 @@ -17,19 +22,25 @@ func LomutoPartition(list []int, start int, end int) int { for i := start + 1; i <= end; i++ { if list[i] < compareValue { moveSubscript++ + charge++ list[moveSubscript], list[i] = list[i], list[moveSubscript] } } + charge++ list[moveSubscript], list[start] = list[start], list[moveSubscript] //交换元素 return moveSubscript } -func LomutoQuiteSelect(list []int, pointPosition int) int { +func LomutoQuiteSelect(list []int, pointPosition int) (int, int, int) { positionCheck(pointPosition, len(list)) //下标校验 + times = 0 + charge = 0 nowPosition := LomutoPartition(list, 0, len(list)-1) + times++ //循环进行lomuto划分处理,知道找到我们需要的那个位置的元素 for nowPosition != pointPosition-1 { + times++ if nowPosition > pointPosition-1 { nowPosition = LomutoPartition(list, 0, nowPosition) } else { @@ -37,7 +48,7 @@ func LomutoQuiteSelect(list []int, pointPosition int) int { } } - return list[nowPosition] + return list[nowPosition], times, charge } func positionCheck(pointPosition int, len int) { diff --git a/util/search/LomutoPartition_test.go b/util/search/LomutoPartition_test.go index 0891730..df60b32 100644 --- a/util/search/LomutoPartition_test.go +++ b/util/search/LomutoPartition_test.go @@ -26,12 +26,140 @@ func TestPartition(t *testing.T) { } } -func TestLomutoQuiteSelect(t *testing.T) { - for k := 1; k <= 9; k++ { - s := LomutoQuiteSelect([]int{99, 1, 2, 3, 4, 100, 200, 90, 5}, k) - fmt.Println(fmt.Sprintf("当前第%d个小的元素是:%d", k, s)) +func doc() string { + return ` + 这边对从前到后查找(第1、2、3、4...大的元素)和从后到前进行查找(第5、4、3、2、1)进行对比,发现从后到前进行查找所做的划分和交换元素操作,在元素多的情况下,效率来的更好,下面是计算的结果. + 【倒序和正序排,无序都对划分次数有影响,正序排的查找效率一致】 - fmt.Println() + 查找指定数量的第几大元素的效率比较 + 从第一大元素开始查找总共进行了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, 21350501, 31524785, 13361644, 64189671, 69383824, 59839749, 78479790, 56399470, 81085916, 40966319, 22287675, 75538701, 21560592, 29471715, 54937993, 61176636, 47933284, 84858932, 7418453, 90540350, 78863504, 26487050, 77011442, 95519924, 34086694, 65726862, 56730076, 9319798, 53837355, 53252839, 56388546, 95177490, 69839042, 20240175, 37086681, 7115103, 71551498, 98568891, 2797094, 10019, 85537833, 93458447, 63176054, 70707466, 57182344, 87554727, 45502054, 70426780, 181175, 21725128, 85741211, 61703292, 87972023, 95388471, 38766653, 78652121, 79363328, 97336147, 22982197, 38210608, 85294028, 60049214, 95046903, 73067912, 66689163, 470782, 39746703, 10433527, 26495376, 36072495, 29095885, 84750312, 70852951, 92427916, 86007297, 71529666, 12458207, 21355305, 71682655, 39569228, 62324359, 34842156, 10589119, 15876337, 18922082, 36989385, 64209688, 9367669, 91629134, 39869533, 44918443, 94719947, 83177336, 95689886, 14874242, 95808987, 34224310, 48081318, 87145050, 57525754, 11724879, 22815775, 402718, 94226692, 24864663, 39005657, 14230427, 57028517, 16906489, 51821569, 37421058, 52685309, 23708312, 2695711, 74225221, 36563206, 41865930, 32870492, 60867175, 58184109, 80027621, 29797585, 25832622, 34365688, 53984988, 28112988, 65527980, 1891847, 80840032, 65181710, 44930884, 71796859, 64034821, 2441213, 7656890, 66905367, 89424374, 86401199, 67833123, 5527158, 39249233, 38380954, 1579340, 33072040, 55270576, 36415874, 83618159, 49171476, 50073095, 38868537, 66197322, 75602022, 23642511, 31802337, 38032700, 21235374, 23274623, 54925864, 55821493, 67875293, 57711466, 6308749, 58797798, 4679205, 31827281, 21068405, 5164401, 49646525, 12436159, 30594186, 69931426, 72018679, 47136790, 28530557, 18469508, 53429438, 65441243, 69598888, 19127164, 33237966, 22176660, 86696667, 86609266, 29497640, 48155451, 81900720, 96078391, 46847249, 61858133, 61682810, 17184579, 38640384, 86445148, 30734982, 96195727, 59870892, 59735846, 7269449, 6223317, 79924624, 24935583, 76562453, 70432640, 17961711, 63455078, 87052186, 6582013, 91169571, 88185256, 55064048, 73411320, 89110024, 83103937, 70826561, 41951196, 70118473, 35419495, 92514522, 7378675, 46115174, 64795880, 37773469, 84201979, 60967345, 26279840, 80064528, 25987400, 62751516, 99092060, 6750975, 34851159, 8162228, 79934563, 21555282, 12130203, 20310282, 71524260, 44716818, 33934195, 22925605, 50427545, 60718677, 43020582, 55313071, 79102910, 12698349, 6501904, 6707954, 76828948, 42615514, 2490566, 44541224, 41909075, 69770918, 6235838, 49491072, 99723426, 75606587, 83740984, 41476545, 14251088, 67954626, 79409730, 33833596, 63167436, 47937495, 74858917, 23519501, 99965146, 67991530, 70253959, 46910392, 9449915, 3297143, 52784017, 62907606, 89737727, 32172351, 89420329, 65638925, 66164181, 52996049, 23938705, 46450541, 59280830, 31021153, 81922985, 33196492, 17643204, 14390294, 55878137, 880937, 3400599, 92739295, 85411967, 47354471, 73649507, 9177232, 81439091, 93365012, 31267697, 58365346, 61119945, 13723349, 46138550, 15739330, 25382259, 3283908, 77735188, 5347146, 73005772, 43473228, 29893467, 6781354, 70395000, 95658722, 28581526, 58640125, 11638653, 35333443, 28571698, 2284521, 31477784, 82910566, 45619949, 58845299, 4543727, 58967390, 65377396, 93603278, 96522125, 73073146, 98616116, 64178520, 18423327, 94355615, 27879180, 44080669, 15857980, 47683122, 66911746, 10204489, 69390935, 54131407, 73909555, 60634605, 10409105, 72549253, 96262826, 53383236, 79330079, 91455321, 72824573, 53364558, 53428168, 65988491, 90147506, 22104048, 75470194, 67474889, 4173969, 24568945, 3005914, 89158256, 75672092, 25977381, 81686438, 58017744, 69343998, 40503290, 4945545, 88438770, 81132079, 89452895, 91325884, 87552759, 42024177, 60041490, 19963506, 62670177, 67754821, 36734803, 39558705, 754557, 52857519, 99245558, 50932166, 7264320, 26677961, 87486305, 43169529, 11232773, 2920450, 72058400, 54533476, 26809752, 89477139, 52463429, 27198844, 38148855, 67488568, 94568722, 30136509, 61432009, 17907015, 64500060, 34174236, 28330356, 67503941, 12169151, 50617460, 97731461, 29523655, 334587, 18543105, 20451173, 95400818, 34591790, 2042902, 50880565, 27875644, 19275293, 77035455, 9179743, 52006256, 91499008, 87447926, 50018254, 68060002, 12141822, 34655772, 20941895, 54774870, 75870689, 16560883, 51540684, 29546870, 34845305, 30601364, 94114134, 17621814, 47326328, 53967643, 90595357, 67210487, 93279277, 38893183, 84185659, 82351806, 21570038, 42264535, 51361975, 9950928, 17159760, 60391711, 57624832, 77464040, 6383724, 26203492, 40982141, 34573178, 14245026, 79305407, 40258805, 68290605, 89296413, 60178466, 1832323, 6353713, 75234182, 30962062, 2816193, 10518441, 76858316, 84180887, 58860821, 38028908, 58559428, 15360607, 43970616, 59526843, 4998403, 13956871, 98347184, 12403710, 8239725, 86857688, 1177876, 87111455, 59518411, 75563005, 45769053, 36009490, 10427545, 56402693, 96240276, 69900643, 9531163, 54707908, 6123140, 63269531, 29955528, 37885794, 30325251, 21462543, 78201329, 14577568, 33142137, 51234062, 54703611, 93894304, 57343192, 47029850, 62084037, 66729187, 96712207, 43191680, 44675904, 41550820, 82506547, 53469206, 71010484, 88511054, 73179503, 7937637, 8885365, 38753904, 29782811, 3726501, 56639013, 98149427, 41590449, 42478328, 58750083, 35223926, 2914892, 41415725, 7694758, 86708514, 12069130, 15344315, 83374602, 68498749, 32661287, 78908300, 27046834, 8058468, 53052113, 43092160, 57521400, 23127691, 41189210, 14131292, 79507798, 14837765, 2243273, 62927077, 87934783, 94397750, 73615385, 60598905, 50703171, 13853858, 66079662, 66394543, 86222771, 88374085, 39860801, 32080910, 45660737, 12860129, 34756406, 79252115, 35360786, 18532166, 92027870, 22469055, 37932069, 18215726, 58760136, 72232992, 92052062, 74935686, 17820608, 15407881, 69003267, 79567567, 38360632} + 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, 21350501, 31524785, 13361644, 64189671, 69383824, 59839749, 78479790, 56399470, 81085916, 40966319, 22287675, 75538701, 21560592, 29471715, 54937993, 61176636, 47933284, 84858932, 7418453, 90540350, 78863504, 26487050, 77011442, 95519924, 34086694, 65726862, 56730076, 9319798, 53837355, 53252839, 56388546, 95177490, 69839042, 20240175, 37086681, 7115103, 71551498, 98568891, 2797094, 10019, 85537833, 93458447, 63176054, 70707466, 57182344, 87554727, 45502054, 70426780, 181175, 21725128, 85741211, 61703292, 87972023, 95388471, 38766653, 78652121, 79363328, 97336147, 22982197, 38210608, 85294028, 60049214, 95046903, 73067912, 66689163, 470782, 39746703, 10433527, 26495376, 36072495, 29095885, 84750312, 70852951, 92427916, 86007297, 71529666, 12458207, 21355305, 71682655, 39569228, 62324359, 34842156, 10589119, 15876337, 18922082, 36989385, 64209688, 9367669, 91629134, 39869533, 44918443, 94719947, 83177336, 95689886, 14874242, 95808987, 34224310, 48081318, 87145050, 57525754, 11724879, 22815775, 402718, 94226692, 24864663, 39005657, 14230427, 57028517, 16906489, 51821569, 37421058, 52685309, 23708312, 2695711, 74225221, 36563206, 41865930, 32870492, 60867175, 58184109, 80027621, 29797585, 25832622, 34365688, 53984988, 28112988, 65527980, 1891847, 80840032, 65181710, 44930884, 71796859, 64034821, 2441213, 7656890, 66905367, 89424374, 86401199, 67833123, 5527158, 39249233, 38380954, 1579340, 33072040, 55270576, 36415874, 83618159, 49171476, 50073095, 38868537, 66197322, 75602022, 23642511, 31802337, 38032700, 21235374, 23274623, 54925864, 55821493, 67875293, 57711466, 6308749, 58797798, 4679205, 31827281, 21068405, 5164401, 49646525, 12436159, 30594186, 69931426, 72018679, 47136790, 28530557, 18469508, 53429438, 65441243, 69598888, 19127164, 33237966, 22176660, 86696667, 86609266, 29497640, 48155451, 81900720, 96078391, 46847249, 61858133, 61682810, 17184579, 38640384, 86445148, 30734982, 96195727, 59870892, 59735846, 7269449, 6223317, 79924624, 24935583, 76562453, 70432640, 17961711, 63455078, 87052186, 6582013, 91169571, 88185256, 55064048, 73411320, 89110024, 83103937, 70826561, 41951196, 70118473, 35419495, 92514522, 7378675, 46115174, 64795880, 37773469, 84201979, 60967345, 26279840, 80064528, 25987400, 62751516, 99092060, 6750975, 34851159, 8162228, 79934563, 21555282, 12130203, 20310282, 71524260, 44716818, 33934195, 22925605, 50427545, 60718677, 43020582, 55313071, 79102910, 12698349, 6501904, 6707954, 76828948, 42615514, 2490566, 44541224, 41909075, 69770918, 6235838, 49491072, 99723426, 75606587, 83740984, 41476545, 14251088, 67954626, 79409730, 33833596, 63167436, 47937495, 74858917, 23519501, 99965146, 67991530, 70253959, 46910392, 9449915, 3297143, 52784017, 62907606, 89737727, 32172351, 89420329, 65638925, 66164181, 52996049, 23938705, 46450541, 59280830, 31021153, 81922985, 33196492, 17643204, 14390294, 55878137, 880937, 3400599, 92739295, 85411967, 47354471, 73649507, 9177232, 81439091, 93365012, 31267697, 58365346, 61119945, 13723349, 46138550, 15739330, 25382259, 3283908, 77735188, 5347146, 73005772, 43473228, 29893467, 6781354, 70395000, 95658722, 28581526, 58640125, 11638653, 35333443, 28571698, 2284521, 31477784, 82910566, 45619949, 58845299, 4543727, 58967390, 65377396, 93603278, 96522125, 73073146, 98616116, 64178520, 18423327, 94355615, 27879180, 44080669, 15857980, 47683122, 66911746, 10204489, 69390935, 54131407, 73909555, 60634605, 10409105, 72549253, 96262826, 53383236, 79330079, 91455321, 72824573, 53364558, 53428168, 65988491, 90147506, 22104048, 75470194, 67474889, 4173969, 24568945, 3005914, 89158256, 75672092, 25977381, 81686438, 58017744, 69343998, 40503290, 4945545, 88438770, 81132079, 89452895, 91325884, 87552759, 42024177, 60041490, 19963506, 62670177, 67754821, 36734803, 39558705, 754557, 52857519, 99245558, 50932166, 7264320, 26677961, 87486305, 43169529, 11232773, 2920450, 72058400, 54533476, 26809752, 89477139, 52463429, 27198844, 38148855, 67488568, 94568722, 30136509, 61432009, 17907015, 64500060, 34174236, 28330356, 67503941, 12169151, 50617460, 97731461, 29523655, 334587, 18543105, 20451173, 95400818, 34591790, 2042902, 50880565, 27875644, 19275293, 77035455, 9179743, 52006256, 91499008, 87447926, 50018254, 68060002, 12141822, 34655772, 20941895, 54774870, 75870689, 16560883, 51540684, 29546870, 34845305, 30601364, 94114134, 17621814, 47326328, 53967643, 90595357, 67210487, 93279277, 38893183, 84185659, 82351806, 21570038, 42264535, 51361975, 9950928, 17159760, 60391711, 57624832, 77464040, 6383724, 26203492, 40982141, 34573178, 14245026, 79305407, 40258805, 68290605, 89296413, 60178466, 1832323, 6353713, 75234182, 30962062, 2816193, 10518441, 76858316, 84180887, 58860821, 38028908, 58559428, 15360607, 43970616, 59526843, 4998403, 13956871, 98347184, 12403710, 8239725, 86857688, 1177876, 87111455, 59518411, 75563005, 45769053, 36009490, 10427545, 56402693, 96240276, 69900643, 9531163, 54707908, 6123140, 63269531, 29955528, 37885794, 30325251, 21462543, 78201329, 14577568, 33142137, 51234062, 54703611, 93894304, 57343192, 47029850, 62084037, 66729187, 96712207, 43191680, 44675904, 41550820, 82506547, 53469206, 71010484, 88511054, 73179503, 7937637, 8885365, 38753904, 29782811, 3726501, 56639013, 98149427, 41590449, 42478328, 58750083, 35223926, 2914892, 41415725, 7694758, 86708514, 12069130, 15344315, 83374602, 68498749, 32661287, 78908300, 27046834, 8058468, 53052113, 43092160, 57521400, 23127691, 41189210, 14131292, 79507798, 14837765, 2243273, 62927077, 87934783, 94397750, 73615385, 60598905, 50703171, 13853858, 66079662, 66394543, 86222771, 88374085, 39860801, 32080910, 45660737, 12860129, 34756406, 79252115, 35360786, 18532166, 92027870, 22469055, 37932069, 18215726, 58760136, 72232992, 92052062, 74935686, 17820608, 15407881, 69003267, 79567567, 38360632} + 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)) }