归并排序的AS实现

最近在做游戏时,要用到这个,在网上查阅了相关资源,并用AS代码实现的,已经测试过了。和大家分享。

public function MergeSort(arr:Array)
		{
			var arrTemp:Array=new Array();
			if (arrTemp == null||arr == null)
			{
				return false;
			}
			else
			{
				DivideSort(arr, 0, arr.length-1, arrTemp);
				arrTemp = null;	
				return arr;
			}
			
		}
		public function MergeOrderedArray(arrA:Array, fst:int, mid:int,lst:int,arrTemp:Array)
		{
			//功能:将有二个有序数列arrA[first...mid]和arrA[mid...last]合并
			var i,j,m,n,k:int;
			i = fst,j = mid + 1;
			m = mid,n = lst;
			k = 0;
			while (i<=m&&j<=n)
			{

				if (arrA[i] <= arrA[j])
				{
					arrTemp[k++] = arrA[i++];
				}
				else
				{
					arrTemp[k++] = arrA[j++];
				}
			}
			while (i<=m)
			{
				arrTemp[k++] = arrA[i++];
			}
			while (j<=n)
			{
				arrTemp[k++] = arrA[j++];
			}
			for (i = 0; i < k; i++)
			{
				arrA[fst + i] = arrTemp[i];
			}
		}
		public function DivideSort(arrA:Array,fst:int,lst:int,arrTemp:Array)
		{
			//功能:递归的分解数列,排序,再合并
			if (fst < lst)
			{
				var mid:int = (fst + lst) / 2;
				DivideSort(arrA, fst, mid, arrTemp);//左边有序  
				DivideSort(arrA, mid + 1, lst, arrTemp);//右边有序  
				MergeOrderedArray(arrA, fst, mid, lst, arrTemp);//再将二个有序数列合并  
			}

		}

 

您的鼓励是我写作最大的动力!

参考博文:

白话经典算法系列之五 归并排序的实现

 

 

 

在Python中,我们可以使用归并排序(Merge Sort)算法对文件进行排序。归并排序是一种分治算法,它将一个大问题分解为小问题,并通过递归地解决小问题来解决整个问题。 首先,我们需要将文件中的数据读取到内存中,并将其进行排序。然后,我们可以使用归并排序的思想来合并已排序的子数组,最终得到完全排序的数据。下面是一个实现文件归并排序的示例代码: ```python def merge_sort_file(input_file, output_file): # 读取输入文件中的数据到内存 with open(input_file, 'r') as file: data = [int(line.strip()) for line in file] # 使用归并排序算法对数据进行排序 sorted_data = merge_sort(data) # 将排序后的数据写入输出文件 with open(output_file, 'w') as file: for num in sorted_data: file.write(str(num) + '\n') def merge_sort(arr): if len(arr) <= 1: return arr # 将数组分为两个子数组 mid = len(arr) // 2 left_arr = arr[:mid] right_arr = arr[mid:] # 递归地对子数组进行排序 left_arr = merge_sort(left_arr) right_arr = merge_sort(right_arr) # 合并已排序的子数组 return merge(left_arr, right_arr) def merge(left, right): merged = [] left_index = 0 right_index = 0 # 比较两个子数组的元素,并按序将较小的元素添加到合并后的数组中 while left_index < len(left) and right_index < len(right): if left[left_index] <= right[right_index]: merged.append(left[left_index]) left_index += 1 else: merged.append(right[right_index]) right_index += 1 # 将剩余的元素添加到合并后的数组中 merged.extend(left[left_index:]) merged.extend(right[right_index:]) return merged ``` 你可以调用`merge_sort_file`函数来实现文件的归并排序。传入输入文件路径和输出文件路径作为参数,函数将会读取输入文件中的数据,对其进行排序,然后将排序后的结果写入输出文件。 注意:这个实现只适用于每行一个数字的文本文件,如果文件结构不同,你需要根据实际情况进行相应的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值