functionBubbleSort(arr)local len =#arr;for i =1,len dofor j =1,len-i doif(a[j]< a[j+1])then
a[j],a[j+1]= a[j+1],a[j];endendendend
插入排序
functionInsertSort(arr)local len =#arr
for i =2,len dolocal temp = arr[i]local j = i-1while(j >=1and temp > arr[j])do
arr[j+1]= arr[j]
j = j-1;end
arr[j+1]= temp;endend
选择排序
functionSelectSort(arr)local len =#arr
for i =1,len-1dolocal maxNum = arr[i]local maxIndex = i
for j = i,len doif(arr[j]> maxNum)then
maxNum = arr[j]
maxIndex = j
endendif(i~=maxIndex)then
arr[i],arr[maxIndex]= arr[maxIndex],arr[i]endendend
快速排序
functionQuickMainSort(arr,left,right)if(left>=right)thenreturnendlocal i = left
local j = right
local temp = arr[left]while(i<j)dowhile(temp>=arr[j]and i<j )do
j=j-1endwhile(temp<=arr[i]and i<j )do
i=i+1endif(i<j)then
arr[i],arr[j]= arr[j],arr[i]endend
arr[left]= arr[i]
arr[i]= temp
QuickMainSort(arr,left,i-1)QuickMainSort(arr,i+1,right)endfunctionQuickSort(arr)QuickMainSort(arr,1,#arr)end
归并排序
functionMerge(arr,left,mid,right)if(left>=right)thenreturnendlocal tab_temp ={}local i=left
local k=mid+1while(i<=mid and k<=right)doif(arr[i]>arr[k])then
table.insert(tab_temp,arr[i])
i=i+1else
table.insert(tab_temp,arr[k])
k=k+1endendwhile(i<=mid)do
table.insert(tab_temp,arr[i])
i=i+1endwhile(k<=right)do
table.insert(tab_temp,arr[k])
k=k+1endfor j=left,right do
arr[j]=tab_temp[j-left+1]endendfunctionMergeMain(arr,left,right)if(left<right)thenlocal mid =(left+right)//2MergeMain(arr,left,mid)MergeMain(arr,mid+1,right)Merge(arr,left,mid,right)endendfunctionMergeSort(arr)MergeMain(arr,1,#arr)end
希尔排序
functionShellSort(arr)local len =#arr
for gap=1,3do--这里可以倒序 gap从3到1 令4-gap = gap;for i=1,4-gap dofor j=i+4-gap,len dolocal temp = arr[j]local k = j-4+gap;while(k>=1and temp>arr[k])do
arr[k+4-gap]= arr[k]
k=k-4+gap;end
arr[k+4-gap]= temp
endendendend
堆排序
functionHeapBulid(arr,root,size)local left = root*2local right = root*2+1local largest = root
if(left<=size and arr[left]< arr[largest])then
largest = left
endif(right<=size and arr[right]< arr[largest])then
largest = right
endif(largest~=root)then
arr[root],arr[largest]= arr[largest],arr[root]HeapBulid(arr,largest,size)endend
完整测试代码
functionArrInit(arr)
arr={3,1,9,4,5,2,7,9,6,11,65,89,32,45,94,0,66}return arr
endfunctionShowArr(arr)local len =#arr;for i =1,len do
io.write(arr[i])
io.write(" ")end
io.write("\n");endfunctionBubbleSort(arr)local len =#arr;for i =1,len dofor j =1,len-i doif(a[j]< a[j+1])then
a[j],a[j+1]= a[j+1],a[j];endendendendfunctionInsertSort(arr)local len =#arr
for i =2,len dolocal temp = arr[i]local j = i-1while(j >=1and temp > arr[j])do
arr[j+1]= arr[j]
j = j-1;end
arr[j+1]= temp;endendfunctionSelectSort(arr)local len =#arr
for i =1,len-1dolocal maxNum = arr[i]local maxIndex = i
for j = i,len doif(arr[j]> maxNum)then
maxNum = arr[j]
maxIndex = j
endendif(i~=maxIndex)then
arr[i],arr[maxIndex]= arr[maxIndex],arr[i]endendendfunctionQuickMainSort(arr,left,right)if(left>=right)thenreturnendlocal i = left
local j = right
local temp = arr[left]while(i<j)dowhile(temp>=arr[j]and i<j )do
j=j-1endwhile(temp<=arr[i]and i<j )do
i=i+1endif(i<j)then
arr[i],arr[j]= arr[j],arr[i]endend
arr[left]= arr[i]
arr[i]= temp
QuickMainSort(arr,left,i-1)QuickMainSort(arr,i+1,right)endfunctionQuickSort(arr)QuickMainSort(arr,1,#arr)endfunctionMerge(arr,left,mid,right)if(left>=right)thenreturnendlocal tab_temp ={}local i=left
local k=mid+1while(i<=mid and k<=right)doif(arr[i]>arr[k])then
table.insert(tab_temp,arr[i])
i=i+1else
table.insert(tab_temp,arr[k])
k=k+1endendwhile(i<=mid)do
table.insert(tab_temp,arr[i])
i=i+1endwhile(k<=right)do
table.insert(tab_temp,arr[k])
k=k+1endfor j=left,right do
arr[j]=tab_temp[j-left+1]endendfunctionMergeMain(arr,left,right)if(left<right)thenlocal mid =(left+right)//2MergeMain(arr,left,mid)MergeMain(arr,mid+1,right)Merge(arr,left,mid,right)endendfunctionMergeSort(arr)MergeMain(arr,1,#arr)endfunctionShellSort(arr)local len =#arr
for gap=1,3do--这里可以倒序 gap从3到1 令4-gap = gap;for i=1,4-gap dofor j=i+4-gap,len dolocal temp = arr[j]local k = j-4+gap;while(k>=1and temp>arr[k])do
arr[k+4-gap]= arr[k]
k=k-4+gap;end
arr[k+4-gap]= temp
endendendendfunctionHeapBulid(arr,root,size)local left = root*2local right = root*2+1local largest = root
if(left<=size and arr[left]< arr[largest])then
largest = left
endif(right<=size and arr[right]< arr[largest])then
largest = right
endif(largest~=root)then
arr[root],arr[largest]= arr[largest],arr[root]HeapBulid(arr,largest,size)endendfunctionHeapSort(arr)local len =#arr;local i=len//2while(i>=1)doHeapBulid(arr,i,len)
i=i-1;endlocal j=len
while(j>1)do
arr[1],arr[j]= arr[j],arr[1]
j=j-1HeapBulid(arr,1,j)endend--Main Test
a={}
a=ArrInit(a)
io.write("NoSort:\n")ShowArr(a)BubbleSort(a)
io.write("BubbleSort:\n")ShowArr(a)
a=ArrInit(a)InsertSort(a)
io.write("InsertSort:\n")ShowArr(a)
a=ArrInit(a)SelectSort(a)
io.write("SelectSort:\n")ShowArr(a)
a=ArrInit(a)QuickSort(a)
io.write("QuickSort:\n")ShowArr(a)
a=ArrInit(a)MergeSort(a)
io.write("MergeSort:\n")ShowArr(a)
a=ArrInit(a)ShellSort(a)
io.write("ShellSort:\n")ShowArr(a)
a=ArrInit(a)HeapSort(a)
io.write("HeapSort:\n")ShowArr(a)
a=ArrInit(a)
冒泡排序function BubbleSort(arr) local len = #arr; for i = 1,len do for j = 1,len-i do if (a[j] < a[j+1]) then a[j],a[j+1] = a[j+1],a[j]; end end endend插入排序function InsertSort(arr) local len = #arr for i = 2,len do local temp = arr