【Data_Structure笔记4】排序算法之【交换类排序】
来源:互联网 发布:淘宝认证 编辑:程序博客网 时间:2024/06/06 02:43
/************************************************************************************************************************文件说明: 交换类排序 【1】冒泡排序 【2】快速排序*************************************************************************************************************************/#include<iostream>using namespace std;/************************************************************************************************************************函数原型: 【函数模板】template<typename ElemType>static void BubbleSort(ElemType arrayT[],int iLength)函数说明: 【1】对记录数组arrayT做【冒泡排序】【2】iLength为数组中待排序记录的数目交换排序: 【1】交换排序算法:就是根据序列中两个关键字的比较结果来对换这两个记录在序列中的位置。【2】基于交换的排序算法有很多,一般主要掌握【冒泡排序】和【快速排序】冒泡排序: 【1】冒泡排序算法的基本思想是:假设待排序表长为n,从后往前(或者从前往后)亮亮进行比较相邻元素的值,若为逆序,则交换, 知道序列比较完成。我们称它为一趟冒泡,结果将最小的元素交换在序列的第一个位置。【2】这样每一趟冒泡排序可以确定一个元素的位置,如果待排序的记录有N个记录,则只需要N-1趟的排序*************************************************************************************************************************/template<typename ElemType>static void BubbleSort(ElemType arrayT[],int iLength){for(int i=0;i<(iLength-1);i++) //【1】外循环控制排序的循环的次数,N个数,需要进行N-1趟的比较{for(int j=i;j<(iLength-1);j++) //【2】每趟需要比较的次数{if(arrayT[i]>arrayT[j]){int iTemp = arrayT[i];arrayT[i] = arrayT[j];arrayT[j] = iTemp;}//if}}//for i}/************************************************************************************************************************函数原型: 【函数模板】template<typename ElemType>ElemType QuickSort(ElemType arrayT[],int iLeft,int iRight)函数说明: 对记录数组arrayT中的arrayT[iLeft]至arrayT[iRight]部分进行一趟快速排序,并得到基准的位置快速排序: 快速排序是对冒泡排序的一种改进。其基本思想是基于【分治法】的: 【1】在待排序表L[1...n]中任取一个元素pivot作为 作为基准,通过一趟排序,将待排序表划分为两部分L[1....k-1]和 L[k+1.....n],是的前部分子表中的所有元素都小于pivot,后半部分的所有元素都大于pivot,则pivot放在了最终的位置上L(k),这个过程放称作一趟【快速排序】。 【2】而后,分别递归的对两个子表重复上述过程,直至每部分内只有一个元素或者为空为止,即所有的元素均放在了最终的位 置上。*************************************************************************************************************************/template<typename ElemType>ElemType QuickKPass(ElemType arrayT[],int iLeft,int iRight){ElemType pivotT = arrayT[iLeft]; //【1】选择一个基准的记录int iLow = iLeft;int iHigh = iRight;while(iLow<iHigh){while(iLow<iHigh&&pivotT<=arrayT[iHigh])iHigh--;if(iLow<iHigh){arrayT[iLow]=arrayT[iHigh];iLow++;}while (iLow<iHigh&&pivotT>arrayT[iLow]){iLow++;}if(iLow<iHigh){arrayT[iHigh]=arrayT[iLow];iHigh--;}}//whilearrayT[iLow] = pivotT;return iLow;}template<typename ElemType>static void QuickSort(ElemType arrayT[],int iLow,int iHigh){if(iLow<iHigh){int iPos = QuickKPass<int>(arrayT,iLow,iHigh);QuickSort(arrayT,iLow,iPos-1);QuickSort(arrayT,iPos+1,iHigh);}}/************************************************************************************************************************模块说明: 控制台应用程序的入口点*************************************************************************************************************************/int main(int argc,char* argv[]){int arrayT[15] = {22,32,44,34,56,21,24,345,213,234,245,127,113,119,933};//BubbleSort<int>(arrayT,15);QuickSort<int>(arrayT,0,14);for(int i=0;i<15;i++){std::cout<<arrayT[i]<<std::endl;}std::system("pause");return 0;}
阅读全文
0 0
- 【Data_Structure笔记4】排序算法之【交换类排序】
- 【Data_Structure笔记5】排序算法之【选择类排序】
- 【Data_Structure笔记8】排序算法之【选择排序---堆排序】
- 【Data_Structure笔记6】排序算法之【二路归并排序】
- 【Data_Structure笔记7】排序算法之【链式基数排序】
- 【Data_Structure笔记14】【笔试】之【所有排序算法】
- 【Data_Structure笔记3】排序算法之插入排序常见的三种算法
- 排序算法之交换排序
- 排序算法之交换排序
- 排序算法之交换排序
- 排序算法之交换排序
- 排序算法之交换排序
- 排序算法之交换排序
- 算法之交换排序
- 【排序】排序算法之交换排序
- 【排序】排序算法之---交换排序
- 排序算法--交换排序之快速排序
- 排序算法-交换排序之快速排序
- HTML行元素和块元素
- codeforces843C Upgrading Tree -- 构造
- 读书笔记:机器学习实战【第4章:朴素贝叶斯】
- 构建嵌入式Linux应用系统 —— mp3播放器 madplay的移植
- Java实现Html转PDF
- 【Data_Structure笔记4】排序算法之【交换类排序】
- DirectFB学习之使用devmem驱动
- springboot搭建
- Linux信号(signal) 机制分析
- hdu 2082 找单词(母函数)
- Android vitamo 实现横竖屏的切换和页面内部的网络视频
- 源
- 【安卓学习笔记】JAVA基础Lesson6-关键字static
- Java重要的数据结构Set,List,Map