排序算法 Lua实现

--排序算法汇总 lua版本
arr = {5,0,4,1,8,2,3,6,7,9}
--打印数组函数
function print_arr( arr )
	for i,v in ipairs(arr) do
		print(v)
	end
end

--冒泡排序 从小到大
--逐个比较,谁大谁就往上走
function bubble_sort( arr )
	for i, v in ipairs(arr) do
		for j = 1, i do
			if arr[i] < arr[j] then
				arr[i], arr[j] = arr[j], arr[i]
			end
		end
	end	
end

--选择排序
--每次选出最小的那个,放在最前面
function select_sort( arr )
	for i in ipairs(arr) do
		local minIndex = i
		for j = i + 1, #arr do
			if arr[j] < arr[minIndex] then
				minIndex = j
			end
		end
		arr[i], arr[minIndex] = arr[minIndex], arr[i]
	end
end

--插入排序
--每次选出一个插到已排好序的数组里
function insert_sort( arr )
	for i = 2, #arr do  --从第二位开始,往左边开始插
		local current = arr[i] --取出要插入的数字 即基数
		local j = i - 1  --该index指的是每次比较的数字的下标,从基数左边开始
		while j >= 1 and arr[j] > current do --当它比基数大的时候 j>=1必须加上
			arr[j + 1] = arr[j]   --它要往后移一位
			j = j - 1             
		end
		arr[j+1] = current  --把基数插进入
	end
end

--快速排序 从小到大
--右往左探寻,左往右探寻,然后交换
function quick_sort( arr , left, right) --一定是left和right,不能写1 和 #arr
	if left < right then
		local t = partition(arr, left, right)
		quick_sort(arr, left, t-1)
		quick_sort(arr, t+1, right)
	end
end
function partition( arr, left, right )
	local base = arr[left] --选最左边的为基数
	local i = left 
	local j = right 
	while i < j do --一定要从右边开始,逐步往左探寻
		while i < j and arr[j] >= base do
			j = j - 1
		end
		while i < j and arr[i] <= base do
			i = i + 1
		end
		arr[i], arr[j] = arr[j], arr[i]
	end
	arr[left], arr[i] = arr[i], arr[left] --记得基数归为位
	return i
end

--归并排序
--堆排序
--计数排序




-- bubble_sort(arr)
-- quick_sort(arr, 1 ,#arr)
-- select_sort(arr)
-- insert_sort(arr)

print_arr(arr)



猜你喜欢

转载自blog.csdn.net/u010859498/article/details/81541646