冒泡排序和插入排序(直接插入、折半插入、希尔排序)(殷人昆版)
来源:互联网 发布:mac怎么删除flash插件 编辑:程序博客网 时间:2024/06/02 14:35
一、普通实现冒泡排序
冒牌排序的基本思想是:设待排序元素序列中的元素个数为n,首先比较第n-2个元素和第n-1个元素,如果发生逆序,则交换两个元素。其余处理方式相同。
<span style="font-family:Microsoft YaHei;font-size:18px;"><strong>void BubbleSort(int V[], int n){for(int i = 0; i < n; ++i){for(int j = 1; j < n-i; ++j){if(V[j-1] > V[j]){int tmp = V[j-1];V[j-1] = V[j];V[j] = tmp;}}}}</strong></span>
二、加入bool标志避免顺序已排好还进行排序,浪费时间
加入bool值exchange用以标志本趟循环是否交换数据,若为false则直接结束。
<span style="font-family:Microsoft YaHei;font-size:18px;"><strong>void NewBubbleSort(int V[], int n){bool exchange;for(int i = 0; i < n; ++i){for(int j = 1; j < n-i; ++j){exchange = false;if(V[j-1] > V[j]){int tmp = V[j-1];V[j-1] = V[j];V[j] = tmp;exchange = true;}}if(!exchange){return;}}}</strong></span>
三、直接插入排序
直接插入排序的基本思想:当插入第i(i>=1)个元素时,前面的V[0]、V[1],……,V[i-1]已经排好序。这时用V[i]的排序码与V[i-1],V[i-2],……的排序码顺序进行比较,找到插入排序即将V[i]插入,原来位置上的元素向后顺移。
<span style="font-family:Microsoft YaHei;font-size:18px;"><strong>void InsertSort(int V[], int left, int right){int i, j;for(i = left+1; i < right+1; ++i){if(V[i] < V[i-1]){int tmp = V[i];j = i-1;do{V[j+1] = V[j];j--;}while(j >= left && tmp < V[j]);//向后移位V[j+1] = tmp;}}}</strong></span>
四、折半插入排序(二分法插入排序)
折半插入排序(二分法插入排序)的基本思想:设有一个元素序列V[0]、V[1]、V[2]……V[n-1]。其中V[0]、V[1]、V[2]……V[i-1]都是已经排好序的元素。在插入V[i]时,利用折半搜索法寻找V[i]的插入位置。
<span style="font-family:Microsoft YaHei;font-size:18px;"><strong>void BinaryInsertSort(int V[], int left, int right){int tmp, i, low, high, middle, k;for(i = left+1; i < right+1; ++i){tmp = V[i];low = left;high = i-1;while(low <= high){middle = (low+high)/2;if(tmp < V[middle]){high = middle-1;}else{low = middle+1;}}for(k = i-1; k >= low; --k)//向后移位,移开插入的位置{V[k+1] = V[k];}V[low] = tmp;//插入}}</strong></span>
五、希尔排序
希尔排序的基本思想:设待排序元素序列有n个,首先取整数gap<n作为间隔,将所有元素分为gap个子序列,所有距离为gap的元素放在一个子序列中,在每个子序列中分别实行直接插入排序。然后缩小间隔gap,直至gap==1,将所有的元素放在同一序列为止。
<span style="font-family:Microsoft YaHei;font-size:18px;"><strong>void ShellSort(int V[], int left, int right){int i, j, gap = right-left+1, tmp;do{gap = gap/3+1;//求下一增量for(i = left+gap; i < right+1; ++i){if(V[i] < V[i-gap]){tmp = V[i];j = i-gap;do{V[j+gap] = V[j];//后移元素j = j-gap; //再比较前一元素}while(j >= left && tmp < V[j]);V[j+gap] = tmp;}}}while(gap > 1);}</strong></span>
0 0
- 冒泡排序和插入排序(直接插入、折半插入、希尔排序)(殷人昆版)
- 插入排序(希尔排序、直接插入、折半插入排序)
- 插入排序(直接插入,折半插入,希尔)
- 排序算法实例(冒泡法排序、选择法排序、直接插入排序 、希尔法排序、折半插入排序)
- C++实现常用排序算法(快速排序、冒泡排序、希尔排序、折半插入排序、直接插入排序)
- java实现排序算法之插入排序(直接插入排序,折半插入排序,希尔排序)
- 排序算法——插入排序(直接插入排序、折半插入排序、希尔排序)
- IOS- 快速排序,冒泡排序,直接插入排序和折半插入排序,希尔排序,堆排序,直接选择排序
- java数据结构之插入排序(直接插入排序、折半插入排序、希尔排序)
- 通俗理解插入排序(直接插入排序,折半插入排序,希尔排序)
- 算法-排序-插入排序(直接插入和希尔排序)
- 插入排序(直接插入排序和希尔(shell)排序
- 插入排序(直接插入排序和希尔排序)
- 排序算法(堆排序,直接插入排序,折半插入排序,希尔排序)
- 直接插入排序,二分(折半)插入排序,希尔插入排序
- 插入排序:直接插入排序,折半查找排序,希尔排序
- 排序算法--直接插入排序、折半插入排序、希尔排序
- 数据结构-插入排序(直接插入排序+折半插入排序)
- 微信开发-微信消息的接收与返回(2)
- SQL Server 系统数据库还原
- HTML form表单自动填写自动提交
- 【iOS】数据库Core Data的使用
- Android Studio编译大工程报错:java.exe'' finished with non-zero exit value 1
- 冒泡排序和插入排序(直接插入、折半插入、希尔排序)(殷人昆版)
- C中的结构体
- Touch事件理解
- 软件工程(四)
- android 两数相除取小数点后n位
- 量化派重磅推出"量化派开放平台"
- iframe中js创建dom,高度自适应
- 随笔(2015.12)
- 高精度运算