C 實現泛型選擇排序演算法

2021-07-31 08:46:38 字數 3206 閱讀 8758

選擇排序(selection sort)是一種簡單直觀的排序演算法

。它的工作原理是每一次從待排序的資料元素

中選出最小(或最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。

實現陣列元素的有序排列。

假設有陣列:int arr = ;當我們首先進行第一趟排序,每次比較相鄰的兩個元素並把較大的元素值的索引記錄下來,然後拿最大的元素的值和接下來的所有元素比較,只要;沒有後面的值大,就記錄下來索引,直到最終找出最大值的索引,第一趟比較完畢,交換取到的的最大的元素,放在索引為0的位置,第二趟比較的時候我們依然是從剩下的元素中找到最大的元素,將它放在索引為1的位置......依次類推,我們每次從剩下的元素中找到最大的元素放在上一次排序後的那個位置,就完成了對素組的排序!這是大的方向,具體怎麼排序呢,下面有**展示。

/// /// int型別的選擇排序

///

///

public static void selectsort(int arr)

}int temp = arr[index];

arr[index] = arr[i];

arr[i] = temp;

}

}

我們使用如下**測試一下:

int arr = ;

printarr(arr);

selectsort(arr);

printarr(arr);

結果如圖所示:

此時如果是字串陣列該如何排序呢?我們可以考慮做一些修改,看能不能實現排序,**修改後如下:

/// /// string型別的陣列的選擇排序

///

///

public static void selectsort(string arr)

}string temp = arr[index];

arr[index] = arr[i];

arr[i] = temp;

}

}

然後我們來測試以下**:

string arr = ;

printarr(arr);

selectsort(arr);

printarr(arr);

運算結果如圖所示:

那麼我們是否考慮到用乙個通用的選擇排序方法呢?通過觀察這兩個選擇排序我們可以看出,二者只有比較的條件不同,其他的**幾乎是一樣的,那麼我們考慮把這個不同的條件給提取出來!不難想象我們可以使用委託的辦法來傳這個比較的條件,我們可以在命名空間下宣告乙個泛型的委託用來傳遞不同的條件,**如下:

public delegate int delcompare(t t1,t t2);
然後我們來修改選擇排序的方法,如下所示:

public static void selectsort(t arr,delcomparedel)

}t temp = arr[index];

arr[index] = arr[i];

arr[i] = temp;}}

再寫乙個列印的方法:

/// /// 列印陣列的所有元素

///

///

///

public static void printarr(t arr)

console.writeline();

}

然後我們再次測試一下:

string arr = ;

printarr(arr);

selectsort(arr, (string t1, string t2) =>

);printarr(arr);

運算結果依然是:

我們再次測試乙個稍微複雜一點的,寫乙個person類:

public class person

public int age

public int mathscore

public int chinesescore

public int englishscore

public person()

public person(string name, int age, int mathscore, int chinesescore, int englishscore)

public override string tostring()

", this.name, this.age, this.chinesescore, this.mathscore, this.englishscore, (this.chinesescore + this.mathscore + this.englishscore));}}

然後初始化乙個person陣列,再進行選擇排序,**如下:

person parr = new person[10];

random range = new random();

for (int i = 0; i < parr.length; i++)

為了方便顯示,修改下列印方法:

public static void printarr(t arr)

console.writeline();

}

萬事俱備,我們再次來測試

printarr(parr);

selectsort(parr, (person p1, person p2) =>

);printarr(parr);

結果如我們所預示,如圖:

泛型排序(C )

一般講排序演算法的文章,為了方便說明演算法本身,待排序元素的型別一般使用整型。還有些文章講泛型排序,待排序元素可以是任意型別,但對於待排序序列,卻一般只支援某一種儲存形式,比如定長陣列,比如std vector,但不能同時支援它們。那麼我們有沒有辦法使用泛型技術即支援任意元素型別又支援大多數常用的序...

java泛型實現插入排序與選擇排序

選擇排序 選擇排序模板方法 泛型相關 public static void selectionsort t arr,int n 執行結果 public static void main string args else arr j temp long optinsertfinaltime syste...

C 泛型演算法

標準庫並未給每個容器都定義成員函式來實現這些操作,而是定義了一組泛型演算法,稱他們為演算法是因為他們實現了一些經典演算法的公共介面,如排序和搜尋 稱他們為排序的是因為它們可以用於不同型別的元素和多種容器型別。大多數演算法都定義在標頭檔案algorithm中。標準庫還在標頭檔案numeric中定義了一...