Android開發日記:好久沒寫的氣泡排序

山有木xi發表於2023-02-25

最近在開發時遇到一個需求,給定一個 ListA 集合,裡面儲存不定長度的 String 字串,透過網路請求獲取另外一串 ListB 資料,讀取 ListB ,將 ListB 中含有 ListA 中字串的資料放到集合前方,將不含有相關資料的放入後方

開發業務久了,第一反應是

1.  先迴圈 ListB 的每個值,將符合 ListA 的資料提取出來,使用一個臨時的 List 進行儲存

2.  這個時候 ListB 中的資料都是不含有 ListA 的,將 ListB 剩下的資料放入臨時 List

3.  將臨時 List 的資料覆蓋到 ListB

程式碼如下:

private fun sortSearch(ListA: MutableList<String>, ListB: MutableList<String>) :MutableList<String>{
    val tempList = mutableListOf<String>()
    ListB.forEach { itB ->
        ListA.firstOrNull { itB.contains(it) }?.let { tempList.add(itB) }
    }
    ListB.removeAll(tempList)
    tempList.addAll(ListB)
    return tempList
}


但是仔細一想,這不是可以直接用最基礎的氣泡排序嗎

思路如下:

1.  定義兩個臨時變數,一個記錄符合條件的 index 值,另外一個記錄不符合條件的 index

2.  迴圈 ListB ,獲取第一個符合條件的 index 和第一個不符合條件的 index 值,將他們賦值給臨時變數

3.  每次對比兩個臨時變數的值,如果符合條件的 index 值大於不符合的則將他們的位置和 index 值進行調換

程式碼如下:

private fun sortOfBubble(listA: List<String>): MutableList<String> {
    val tempList = listA.toMutableList()
    var indexOfProduct = -1
    var indexOfNot = -1
    tempList.forEachIndexed { index, string ->
        run product@{
            listB.forEach {
                if (string.contains(it)) {
                    indexOfProduct = index
                    return@product
                }
            }
            if (indexOfNot == -1) indexOfNot = index
        }
        if (indexOfNot != -1 && indexOfProduct != -1 && indexOfProduct > indexOfNot) {
            val temp = tempList[indexOfProduct]
            tempList[indexOfProduct] = tempList[indexOfNot]
            tempList[indexOfNot] = temp
            indexOfNot = indexOfProduct
        }
    }
    return tempList
}



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2937035/,如需轉載,請註明出處,否則將追究法律責任。

相關文章