Record

机会是留给有准备的人

快速排序之golang实现

    func main()  {
    
        arr := []int{16 ,1, 20, 17, 19, 13, 4, 5, 10, 8}
           //arr的下标0  ,1 , 2,  3,  4,  5,  6, 7, 8, 9
        quickSort(arr,0,len(arr)-1)
        fmt.Println(arr)
    
    }
    
    //快速排序
    func quickSort(arr []int,start int,end int)  {
    
        if start > end {
            return
        }
    
        i ,j ,temp := start,end,arr[start]
    
    
        for i < j {
    
            //从右向左查找小于基准数的元素
            for i < j && arr[j] > temp {
                j--
            }
    
            //从左到右查找大于等于基准数的元素
            for i < j && arr[i] <= temp {
                i++
            }
    
            //交换
            if i< j {
                //fmt.Println("交换前 =",arr)
                arr[j],arr[i] =arr[i],arr[j]
                fmt.Println("从右边开始找下标第",j,"的元素(",arr[i],")与左边下标第",i,"的元素(",arr[j],")交换,结果:",arr)
            }
    
    
    
        }
    
    
        arr[start],arr[i] =arr[i],arr[start]
        fmt.Println("基准数",arr[i],"与",arr[start],"交换,结果",arr)
        fmt.Println("-----------华丽的分割线-------------")
    
        quickSort(arr,start,i-1) //递归继续排左边数据
        quickSort(arr,i+1,end) //递归继续排右边数据
    
    }