数据结构之排序
一、冒泡排序
思路:首先把最大的放后面,然后把第二大的放后面
程序设计:使用循环一个一个比较
package main
import (
"fmt"
)
func main(){
var arr [5]int=[5]int{21,11,32,17,5} //排序数组
for i:=0;i<len(arr)-1;i++{
for i:=0;i<len(arr)-1;i++{
if arr[i]>arr[i+1]{
temp:=arr[i]
arr[i]=arr[i+1]
arr[i+1]=temp
}
}
}
fmt.Println(arr)
}
二、选择排序
思想:从数组中选出最小的与R[0]交换,然后再R[1]~R[n]中选出最小的与R[2]交换…
程序设计:假设第一个最大,然后比较排序
package main
import (
"fmt"
)
func main(){
var arr [5]int=[5]int{12,554,77,44,354}
fmt.Println("原始的数组",arr)
for j:=0;j<len(arr)-1;j++{
min:=arr[j]
minIndex:=j
for i:=j+1;i<len(arr);i++{
if min>arr[i]{
min=arr[i]
minIndex=i
}
}
if minIndex!=j{
arr[j],arr[minIndex]=arr[minIndex],arr[j]
}
}
fmt.Println("排序后的数组",arr)
}
三、插入排序
思路:把数组看成有序表和无序表,在无序列表中拿值和前面比较
程序设计:需要记录坐标和当前插入的值,依次比较选出位置
package main
import (
"fmt"
)
func main(){
var arr [5]int=[5]int{5,4,3,2,1}
for j:=1;j<len(arr);j++{
val:=arr[j]
index:=j-1
for index>=0&&arr[index]>val{
arr[index+1]=arr[index]
index--
}
if index+1!=j{
arr[index+1]=val
}
}
fmt.Println(arr)
}
四、快速排序
思想:递归思想
程序设计:首先选择一个数,把其余的数在排序的时候分成两部分,比他小的在左边,比他大的在右边,在分为两部分后,将左边的部分进行左递归,右边的部分右递归进行排序。
package main
import (
"fmt"
)
func QuickSort(left int,right int, arr *[6]int){
var temp int =arr[(left+right)/2] //选取中间值,这里选择中间的数字(随意选择)
l:=left
r:=right
for l<r {
for arr[l]<temp{
l++
}
for arr[r]>temp{
r--
}
if l>=r{
break
}
arr[l],arr[r]=arr[r],arr[l] //找到就交换
if arr[l]==temp{
r--
}
if arr[r]==temp{
l++
}
}
if l==r{
l++
r--
}
if left<r{ //left为0
QuickSort(left,r,arr)
}
if right>l{
QuickSort(l,right,arr)
}
}
func main(){
var arr [6]int=[6]int{5,4,3,2,1}
QuickSort(0,len(arr)-1,&arr)
fmt.Println(arr)
}