简单模板排序的实现(回顾排序)
2014-02-06 13:28
183 查看
复习几种排序算法,并且放到类里实现,可以直接用。
测试调用
复习模板的使用和排序方法,希望对大家有用。
/* 用模板实现排序的类Sort 简单的把几个常用的排序方法加到Sort类里面 其中包含冒泡排序,选择排序,快速排序,归并排序 */ template<class T> class Sort{ public: // 冒泡排序 static void BubbleSort(T* array, int size); // 选择排序 static void SelectSort(T* array, int size); // 快速排序 static void QuickSort(T* array, int left, int right); // 归并排序 static void Merge(T* array, int left, int mid, int right); static void MergeSort(T* array, int left, int right); private: // 交换元素函数 static void Swap(T* array, int a, int b); }; // 交换数组里面的元素 template<class T> void Sort<T>::Swap(T* array, int a, int b) { T temp = array[a]; array[a] = array[b]; array[b] = temp; } // 冒泡排序 template<class T> void Sort<T>::BubbleSort(T* array, int size) { for (int i = 0; i < size; i++) { for (int j = 1; j < size; j++) { if (array[j] < array[j - 1]) { Swap(array, j, j - 1); } } } } // 选择排序 template<class T> void Sort<T>::SelectSort(T* array, int size) { int minIndex = 0; for (int i = 0; i < size; i++) { minIndex = i; for (int j = i + 1; j < size; j++) { if (array[minIndex] > array[j]) { minIndex = j; } } if (minIndex != i) { Swap(array, i, minIndex); } } } // 快速排序 template<class T> void Sort<T>::QuickSort(T* array, int left, int right) { if (left < right) { int i = left - 1, j = right + 1; T mid = array[(left + right) / 2]; while (true) { while (array[++i] < mid); while (array[--j] > mid); if (i >= j) { break; } Swap(array, i, j); } QuickSort(array, left, i - 1); QuickSort(array, j + 1, right); } } /* 方式是先两两排序,组合,再排序 例如 54 26 35 46 85 95 68 先54-26 35-46 85-95 68 再26-54 - 35-46 68 - 85-95 再26-35-46-54 - 68-85-95 最后整合 */ // 归并组合 template<class T> void Sort<T>::Merge(T* array, int left, int mid, int right) { T* temp = new T[right - left + 1]; int i = left, j = mid + 1, m = 0; while (i <= mid && j <= right) { if (array[i] < array[j]) { temp[m++] = array[i++]; }else { temp[m++] = array[j++]; } } while (i <= mid) { temp[m++] = array[i++]; } while(j <= right) { temp[m++] = array[j++]; } for (int n = left, m = 0; n <= right; n++, m++) { array = temp[m]; } delete temp; } // 归并排序 template<class T> void Sort<T>::MergeSort(T* array, int left, int right) { if (left < right) { int mid = (left + right) / 2; MergeSort(array, left, mid); MergeSort(array, mid + 1, right); Merge(array, left, mid, right); } }
测试调用
void main() { int number[] = {5, 65, 56, 89, 797, 54, 68, 79, 103}; /*打印方法没有写*/ //printArray(number, sizeof(number) / sizeof(int)); /*换排序算法*/ //Sort<int>::SelectSort(number, sizeof(number) / sizeof(int)); //Sort<int>::MergeSort(number, 0, sizeof(number) / sizeof(int) - 1); //printArray(number, sizeof(number) / sizeof(int)); }
复习模板的使用和排序方法,希望对大家有用。
相关文章推荐
- [C++]queue简单实现--关于模板
- 三种简单排序算法及实现(引用)
- 用C++实现七种排序算法,可选择排序方法,简单易懂。
- 简单选择排序及PHP实现
- 简单实现MFC ListControl 点击列头排序
- c++模板重载之字符串模板库的简单实现
- JavaScript 实现页面元素(ul-li)的简单排序
- 排序:简单排序算法实现:冒泡,选择,插入
- 初学Redis(4)——简单实现Redis缓存中的排序功能
- 【Python】简单例题tuple和list的转换;实现删除一个list里重复的元素;对list a进行排序,并且从最后一个开始删除重复元素
- 外排序(磁盘排序)之多路归并排序的简单实现 C++
- 简单的冒泡排序,实现数字的排序
- 简单的C语言选择排序实现代码
- 堆排序的java简单实现以及讲解
- Java List 实现排序的简单方法
- 200行python代码实现一个类似django的简单模板引擎
- 简单的位排序实现
- SpringMVC+POI 实现Excel按模板方式简单导出功能
- Python实现的简单模板引擎功能示例
- 基本类型的递减排序简单实现