《算法导论》学习笔记之一 排序算法1 (插入排序、选择排序、归并排序)实现代码C++
2013-09-07 22:22
225 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Y_winter_w/article/details/11305125
2.//选择排序算法The Selection Sort_Ascending 首先找出A中的最小元素并将其与A[1]中的元素进行交换。接着,找出A中的次最小元素将其与A[2}中的元素进行交换。对A中前n-1个元素按该方式继续。称该方法为选择算法。
3.//The Bubble Sort 冒泡排序 冒泡排序是反复比较、交换相邻的未按次序排列的元素
最近在看《算法导论》第三版的书,相信很多同学都看过这本神作。
针对前几章书中出现的排序算法,我个人参照书中的 伪代码 拿 C++代码 重新实现
-------有写的不好的地方,请各位同学见谅--------------------------------------------------------
源码下载:点击我
注意:这里我们是对一个未排序的数组进行操作,该数组为 :int A[14] ={27, 17, 3, 16, 13, 10, 1, 5, 7, 12, 4, 8, 9, 0};
以下所有排序都是对数组进行 升序排序;
主函数:
//main.cpp // #include "sort.h" int main() { int A[14] = {27, 17, 3, 16, 13, 10, 1, 5, 7, 12, 4, 8, 9, 0}; int* p = &A[0]; // //Insert_Sort_Ascending(p, 14); //插入排序 //Selection_Sort_Ascending(p, 14); //选择排序 //Bubble_Sort_Ascending(p, 0, 14); //冒泡排序 Merge_Sort_Ascending(p, 0, 13); //归并排序 // for (int i=0; i<14; i++) { cout<<A[i]<<","; } // int a; cin>>a; return 0; }---------------------------------------------------------------------------------------------------------------------------------------------- 1.//插入排序Insert_sort
bool Insert_Sort_Ascending ( int* pArray , int ArrayLength ) { int i ,j ; int key ; for ( j= 1 ; j <ArrayLength ; j ++) { key = pArray [ j]; //将插入的数作为key; i = j - 1 ; while ((i >= 0)&&( pArray [i ]> key)) //将插入的数与前一个数做比较; { pArray [i + 1] = pArray [ i]; //如果前一个数大于key,则前一个数后移一位; i = i - 1; } pArray [i + 1] = key ; } cout <<"Insert_Sort_Ascending:" ; return true ; } //end Insert_Sort_Ascending--插入排序具有最坏情况运行时间O(n^2)
2.//选择排序算法The Selection Sort_Ascending 首先找出A中的最小元素并将其与A[1]中的元素进行交换。接着,找出A中的次最小元素将其与A[2}中的元素进行交换。对A中前n-1个元素按该方式继续。称该方法为选择算法。
bool Selection_Sort_Ascending(int* pArray, int ArrayLength) { for(int j=0; j<ArrayLength-1; j++) { int smallest = j; //把j元素作为最小的元素 for (int i=j+1; i<ArrayLength; i++) { if (pArray[i] < pArray[smallest])//如果这个元素比第一个元素小,把这个元素作为最小的 smallest = i; } int key = pArray[j]; //交换最小的元素与j元素; pArray[j] = pArray[smallest]; pArray[smallest] = key; } cout<<"Selection_Sort_Ascending:" return true;}//end Selection_Sort_Ascending--选择排序具有任何情况运行时间O(n^2)
3.//The Bubble Sort 冒泡排序 冒泡排序是反复比较、交换相邻的未按次序排列的元素
bool Bubble_Sort_Ascending(int* pArray, int start, int ArrayLength){
for (int i=0; i<ArrayLength-1; i++) for (int j=ArrayLength-1; j>i; j--) { if (pArray[j]<pArray[j-1]) { int key = pArray[j]; pArray[j] = pArray[j-1]; pArray[j-1] = key; } } cout<<"Bubble_Sort_Ascending:"; return true;}//end Bubble_Sort_Ascending
--冒泡排序具有运行时间O(n^2)
4.//The Merge Sort 归并排序算法
void Merge(int *a, int p, int q, int r){ int n1 = q-p+1; int n2 = r-q; int *L = new int[n1+1]; int *R = new int[n2+1]; int i, j, k; for (i=0; i<n1; i++){ L[i] = a[p+i]; } for (j=0; j<n2; j++){ R[j] = a[q+j+1]; } L[n1] = 10000000; R[n2] = 10000000; for (i=0, j=0, k=p; k<=r; k++) { if (L[i]<=R[j]) { a[k] = L[i]; i++; }else{ a[k] = R[j]; j++; } } delete []L; delete []R;} bool Merge_Sort_Ascending(int* pArray, int start, int ArrayLength){ if (start<ArrayLength) { int middle = (start+ArrayLength)/2; Merge_Sort_Ascending(pArray, start, middle); Merge_Sort_Ascending(pArray, middle+1, ArrayLength); Merge(pArray, start, middle, ArrayLength); } return true;}//end Merge_Sort_Ascending
--归并排序在最坏的情况下,运行时间为O(nlog n)
相关文章推荐
- Python实现冒泡排序、选择排序、插入排序、快速排序、归并排序、二分法查找算法(基于《算法导论》伪代码)
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 各种排序算法实现——基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——C++实现
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- C++实现冒泡排序,选择排序,插入排序,快速排序,归并排序
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 排序算法的C++实现与性能分析(插入排序、归并排序、快速排序、STOOGE排序、堆排序)
- 常见排序算法的实现(归并排序、快速排序、堆排序、选择排序、插入排序、希尔排序)
- 插入排序、冒泡排序、选择排序、希尔排序、高速排序、归并排序、堆排序和LST基数排序——C++实现
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序的C++代码实现
- 选择排序、冒泡排序、插入排序、基数排序、快速排序、归并排序完整C++实现
- 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)
- 冒泡排序、插入排序、选择排序、快速排序代码实现
- [C++]数据结构:排序算法Part1----冒泡排序、选择排序、插入排序、堆排序
- 排序算法整理(C++):插入排序、交换排序、选择排序、归并排序
- 【归并排序】C++实现归并排序代码
- 选择,插入,希尔,快速,堆,归并排序六种排序方式的Java 实现和性能对比(付代码)
- 插入排序——直接插入排序和希尔排序,C++代码实现