zoukankan      html  css  js  c++  java
  • C++排序算法

    //C++实现计数排序,选择排序,冒泡排序,及时终止排序,插入排序
    #include <iostream> template<typename T> void countSort(T a[], int n, int r[]) {//计数排序 int i; for (i = 0; i < n; ++i) //初始化 r[i] = 0; for (i = 0; i < n; ++i) //计算名次 for (int j = 0; j < i; ++j) if (a[j] <= a[i]) ++r[i]; else ++r[j]; T* u = new T[n]; for (i = 0; i < n; ++i) //依照名次把a的值放在正确的位置 u[r[i]] = a[i]; for (i = 0; i < n; ++i) //吧u中的值移会a中 a[i] = u[i]; delete[] u; } template<typename T> void rearrange(T a[], int n, int r[]) {//原地重排 int i; for (i = 0; i < n; ++i) //初始化 r[i] = 0; for (i = 0; i < n; ++i) //计算名次 for (int j = 0; j < i; ++j) if (a[j] <= a[i]) ++r[i]; else ++r[j]; for (int i = 0; i < n; ++i) while (r[i]!=i) { std::swap(a[i], a[r[i]]); std::swap(r[i], r[r[i]]); } } template<typename T> void selectionSort(T a[], int n) {//选择排序 int maxVal, i, j; for (i = n - 1; i > 0; --i) {//排序 maxVal = i; for (j = 0; j < i; ++j) {//找出最大的值 if (a[maxVal] < a[j]) maxVal = j; } std::swap(a[i], a[maxVal]); } } template<typename T> void bubbleSort(T a[], int n) {//冒泡排序 for (int i = n - 1; i > 0; --i) for (int j = 0; j < i; ++j) //把最大值移到右边 if (a[j] > a[j+1]) std::swap(a[j], a[j+1]); } template<typename T> void insertSort(T a[], int n) {//插入排序 for (int i = 1; i < n; ++i) { T t = a[i]; int j; for (j = i - 1; j >= 0 && t < a[j]; --j) a[j + 1] = a[j]; a[j + 1] = t; } } template<typename T> void selectionSort(T a[], int n) {//及时终止选择排序 int maxVal, i, j; bool sorted = false; for (i = n - 1; !sorted && (i > 0); --i) {//排序 maxVal = 0; sorted = true; for (j = 1; j < i + 1; ++j) {//找出最大的值 if (a[maxVal] <= a[j]) maxVal = j; else sorted = false; } std::swap(a[i], a[maxVal]); } } template<typename T> void bubbleSort(T a[], int n) {//及时终止冒泡排序 bool swapped = false; for (int i = n - 1; i > 0 && !swapped; --i) { swapped = true; for (int j = 0; j < i; ++j) //把最大值移到右边 if (a[j] > a[j + 1]) { std::swap(a[j], a[j + 1]); swapped = false; } } } int main() { int a[]{ 6,5,8,4,3,1 }; int r[5]; //countSort(a, 5, r); //rearrange(a, 6, r); //selectionSort(a, 6); //bubbleSort(a, 6); insertSort(a, 6); for (auto e : a) std::cout << e << " "; std::cout << std::endl; return 0; }

  • 相关阅读:
    一个简单的进程察看器
    查找素数的程序
    两种动态创建对象的方法
    我对企业管理信息系统的看法
    下定决心,准备买dopod535,做基于M$ smartphone 2003(ce.net 4.2)的开发了
    工作流中对于事务处理的思考
    第二次安装.net2005地感受
    贴一个Microsoft Business Framework的图片上来,可能有些兄弟还不知道。
    SizeOf与Structure与Managed Code
    校园招聘技术面试方面的小题目
  • 原文地址:https://www.cnblogs.com/ysjcqs/p/Sort.html
Copyright © 2011-2022 走看看