[C++]各种排序方法
2016-04-01 10:12
435 查看
C/C++代码实现直接插入排序
归并排序
以上请参考。
#include<iostream> using namespace std; int main() { int a[]={98,76,109,34,67,190,80,12,14,89,1}; int k=sizeof(a)/sizeof(a[0]); int j; for(int i=1;i<k;i++)//循环从第2个元素开始 { if(a[i]<a[i-1]) { int temp=a[i]; for(j=i-1;j>=0 && a[j]>temp;j--) { a[j+1]=a[j]; } a[j+1]=temp;//此处就是a[j+1]=temp; } } for(int f=0;f<k;f++) { cout<<a[f]<<" "; } return 0; }
归并排序
//将有二个有序数列a[first...mid]和a[mid...last]合并。 void mergearray(int a[], int first, int mid, int last, int temp[]) { int i = first, j = mid + 1; int m = mid, n = last; int k = 0; while (i <= m && j <= n) { if (a[i] <= a[j]) temp[k++] = a[i++]; else temp[k++] = a[j++]; } while (i <= m) temp[k++] = a[i++]; while (j <= n) temp[k++] = a[j++]; for (i = 0; i < k; i++) a[first + i] = temp[i]; } void mergesort(int a[], int first, int last, int temp[]) { if (first < last) { int mid = (first + last) / 2; mergesort(a, first, mid, temp); //左边有序 mergesort(a, mid + 1, last, temp); //右边有序 mergearray(a, first, mid, last, temp); //再将二个有序数列合并 } } bool MergeSort(int a[], int n) { int *p = new int ; if (p == NULL) return false; mergesort(a, 0, n - 1, p); delete[] p; return true; }快速排序
void sort(int *a, int left, int right) { if(left >= right)/*如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了*/ { return ; } int i = left; int j = right; int key = a[left]; while(i < j) /*控制在当组内寻找一遍*/ { while(i < j && key <= a[j]) /*而寻找结束的条件就是,1,找到一个小于或者大于key的数(大于或小于取决于你想升 序还是降序)2,没有符合条件1的,并且i与j的大小没有反转*/ { j--;/*向前寻找*/ } a[i] = a[j]; /*找到一个这样的数后就把它赋给前面的被拿走的i的值(如果第一次循环且key是 a[left],那么就是给key)*/ while(i < j && key >= a[i]) /*这是i在当组内向前寻找,同上,不过注意与key的大小关系停止循环和上面相反, 因为排序思想是把数往两边扔,所以左右两边的数大小与key的关系相反*/ { i++; } a[j] = a[i]; } a[i] = key;/*当在当组内找完一遍以后就把中间数key回归*/ sort(a, left, i - 1);/*最后用同样的方式对分出来的左边的小组进行同上的做法*/ sort(a, i + 1, right);/*用同样的方式对分出来的右边的小组进行同上的做法*/ /*当然最后可能会出现很多分左右,直到每一组的i = j 为止*/ }
以上请参考。
相关文章推荐
- 关于 C/C++ 的文章
- C语言宏的定义及使用
- 坚持c++,真正掌握c++(2)
- VC++的UNICODE工程一些常用转码
- C\C++宏定义笔记
- extern用法:C文件和C++文件之间的函数互调
- 【poj 3122】Pie 题意&题解&代码(C++)
- 【学习笔记】C++中 const常用的几种形式和目的
- 2015年蓝桥杯省赛B组C/C++:加法变乘法
- C++面向对象高级编程(下)第二周-Geekband
- 2015年蓝桥杯C/C++组:串逐位和
- C++函数编译原理和成员函数的实现
- C++书籍推荐
- C++对象的内存模型
- C++(union), C#(伪union)实现 Java的Float.intBitsToFloat()方法
- 【poj 3258】River Hopscotch 题意&题解&代码(C++)
- OC语言--NSFileManager& NSFileHandle
- C语言(概念术语装逼犯)
- 链表的实现(C++)
- 【poj 3273】Monthly Expense 题意&题解&代码(C++)