C++常用排序演算法 (轉)
//選擇排序法ionSort(int arr[],int n)
template
void SelectionSort(T arr[],int n)
{
int smallIndex; //表中最小元素的下標
int pass,j; //用來掃描子表的下標
T temp; //用來表元素的臨時變數
//pass的範圍是0~n-2 //如果找到更小的元素,則將該位置賦值給smallIndex //如果smallIndex和pass不在相同的位置 /************************************************************************ //如果smallIndex和leftPass不在相同的位置 if(largeIndex!=rightPass) //從兩頭收縮子表 //自編冒泡法排序演算法函式bubbleSort()的實現 //開始遍歷過程,以下標j構成子表,共有n-1個子表 //開始遍歷過程,以下標j構成子表,共有n-1個子表
for (pass=0;pass
//從下標pass開始掃描子表
smallIndex=pass;
//j遍歷整個子表arr[pass+1]到arr[n-1]
for(j=pass+1;j
if(arr[j]
//則將子表中的最小項與arr[pass]交換
if(smallIndex!=pass)
{
temp=arr[pass];
arr[pass]=arr[smallIndex];
arr[smallIndex]=temp;
}
}
}
雙端選擇排序演算法:是上面選擇排序演算法的變種,可以定位每個子表中最小和最大元素
並把它們分別放在子表的開頭和結尾.
************************************************************************/
//雙端選擇排序演算法deSelSort()的實現
template
void deSelSort(T arr[],int n)
{
int smallIndex,largeIndex; //表中最小及最大元素的下標
int leass=0,rightPass=n-1,i,j; //用來從表左邊及右邊掃描子表的下標
T temp; //用於交換元素的臨時變數
while (leftPass<=rightPass)
{
//從左邊及右邊開始掃描子表
smallIndex=leftPass;
largeIndex=rightPass;
//j和i遍歷整個子表arr[LeftPass]~arr[rightPass]
for (i=leftPass+1;i
if (arr[i]
//則將子表中的最小項與arr[pass]交換
if (smallIndex!=leftPass)
{
temp=arr[leftPass];
arr[leftPass]=arr[smallIndex];
arr[smallIndex]=temp;
}
for (j=rightPass-1;j>leftPass;j--)
if(arr[j]>arr[largeIndex])
largeIndex=j;
{
temp=arr[rightPass];
arr[rightPass]=arr[largeIndex];
arr[largeIndex]=temp;
}
leftPass++;
rightPass--;
}
}
template
int bubbleSort(T arr[],int n)
{
bool d=false; //是否發生交換
int i,j; //用於遍歷子表的下標
T temp; //用於交換元素的臨時變數
for (j=n-1;j>=0;j--) //j從後往前收縮n-1~0,以構成子表0~n-1,0~n-2,0~n-3..0~1
{
exchanged=false;
for (i=0;i
if (arr[i]>arr[i+1])
{
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
exchanged=true;
}
}
if (!exchanged) return n-j-1;//如果在一次遍歷中沒有發生交換,則表示已經
//排序好,中斷遍歷過程
}
return n-1-j;
}
//冒泡法排序一般演算法函式bubbleSortEx()的實現
template
int bubbleSortEx(T arr[],int n)
{
int i,pass; //用於遍歷子表的下標
T temp; //用於交換元素的臨時變數
for (pass=0;pass
for (i=0;i
if (arr[i]>arr[i+1])
{
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
return pass;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-963761/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 常用排序演算法排序演算法
- 常用排序演算法之桶排序排序演算法
- 排序演算法之「快速排序(Quick Sort) _c++ 」排序演算法UIC++
- 常用演算法-選擇排序演算法排序
- 常用演算法-插入排序演算法排序
- 八種常用排序演算法排序演算法
- python 常用的排序演算法Python排序演算法
- 幾種常用的排序演算法排序演算法
- JavaScript實現常用排序演算法JavaScript排序演算法
- 常用排序演算法總結(1)排序演算法
- 常用排序演算法總結(2)排序演算法
- js中常用的演算法排序JS演算法排序
- 快速排序演算法C++實現排序演算法C++
- C++排序演算法之氣泡排序改進版C++排序演算法
- 【演算法】Java實現七種常用排序演算法演算法Java排序
- 常用的比較排序演算法總結排序演算法
- python實現常用五種排序演算法Python排序演算法
- 簡述幾種常用的排序演算法排序演算法
- C++筆記 劃分與排序演算法C++筆記排序演算法
- C/C++ 常用加密與解密演算法C++加密解密演算法
- 如何理解JavaScript中常用的4種排序演算法?JavaScript排序演算法
- 幾種常用的排序演算法之JavaScript實現排序演算法JavaScript
- 用 Java 實現的八種常用排序演算法Java排序演算法
- 常用的排序演算法(五)--選擇排序以及最佳化(PHP實現)排序演算法PHP
- 演算法與資料結構——選擇排序(c++)演算法資料結構排序C++
- 快速排序C++排序C++
- 堆排序(C++)排序C++
- 資料結構與演算法-反轉排序資料結構演算法排序
- 【JAVA演算法】排序演算法 -- 快速排序Java演算法排序
- 排序演算法__桶排序排序演算法
- 排序演算法__快速排序排序演算法
- 排序演算法__堆排序排序演算法
- 排序演算法:快速排序排序演算法
- 排序演算法 - 堆排序排序演算法
- 排序演算法-堆排序排序演算法
- 排序演算法 - 快速排序排序演算法
- c/c++ 通用的(泛型)演算法 之 只讀演算法,寫演算法,排序演算法C++泛型演算法排序
- 關於前端中常用的排序演算法-圖文講解前端排序演算法
- C++希爾排序C++排序