您的位置:首页 > 其它

基本排序算法(选择,冒泡,一般插入,二分插入)源码

2008-03-14 12:29 337 查看



#include <cstdlib>


#include <iostream>


#include <cassert>


using namespace std;






/**//* output array elements */


template <class T>


void Print(const T *in, int n)




...{


for (int i = 0; i < n; i++)




...{


cout << in[i] << " ";


}


cout << endl;


}




template <class T>


void Exch2Item(T &item1, T &item2)




...{


T temp = item1;


item1 = item2;


item2 = temp;


};






/**//* bubble sort algorithm */


template <class T>


void BubbleSort(T *input, int n)




...{


assert(input != NULL);


for (int i = 0; i < n-1; i++)




...{


for (int j = 0; j < (n - i - 1) ; j++)




...{


if (input[j] > input[j + 1])




...{


Exch2Item(input[j], input[j + 1]);


}


}


}


}






/**//* select sort algorithm */


template <class T>


void SelectSort(T *input, int n)




...{


assert(input != NULL);


for (int i = 0; i < n-1; i++)




...{


for (int j = i + 1; j < n; j++)




...{


if (input[i] > input[j])




...{


Exch2Item(input[j], input[i]);


}


}


}


}




/**//* common insert sort algorithm */


template <class T>


void InsertSort(T *input, int n)




...{


T temp;


for (int i = 1; i < n; i++)




...{


temp = input[i];


for (int j = 0; j < i; j++)




...{


if (input[j] > temp)




...{


break;


}


}




for (int k = i; k >= j+1; k--)




...{


input[k] = input[k - 1];


}


input[j] = temp;


}


}




/**//* binary insert sort algorithm */


template <class T>


void BInsertSort(T *input, int n)




...{


T temp;


int l, r, mid, k;


for (int i = 1; i < n; i++)




...{


temp = input[i];


l = 0;


r = i - 1;


while (l <= r)




...{


mid = (l + r) / 2;


if (input[mid] < temp)




...{


l = mid +1;


}


else if (input[mid] > temp)




...{


r = mid -1;


}


else




...{


k = mid;


break;


}


}




/**//* now l is the place to insert, move forward the elements between l and i*/


for (int j = i; j >= l+1; j--)




...{


input[j] = input[j - 1];


}


input[l] = temp;


}


}




int main(int argc, char *argv[])




...{




int a[] = ...{12, 43, 1, 3, 5, 2, 7, 8, 0, 4, 89};


printf("%d ", sizeof(a));


BubbleSort(a, sizeof(a)/sizeof(int));


SelectSort(a, sizeof(a)/sizeof(int));


BInsertSort(a, sizeof(a)/sizeof(int));


Print(a, sizeof(a)/sizeof(int));


return 0;


}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: