6种排序算法:冒泡、鸡尾酒、选择、插入、归并、快速
2012-03-29 13:09
441 查看
#include <iostream> using namespace std; void BubbleSort(int* pData,int Count)//冒泡排序 { int iTemp,i,j; for (i = 1;i < Count;i++) { for (j = Count - 1;j >= i;j--) { if (pData[j] < pData[j-1]) { iTemp = pData[j-1]; pData[j-1]=pData[j]; pData[j]=iTemp; } } } } void main() { int i,data[] = {10,9,8,7,6,5,4}; BubbleSort(data,7); for (i = 0;i<7;i++) { cout<<data[i]<<" "; } cout<<"\n"; }
#include <iostream> using namespace std; void Cocktail(int* arr, int size)//鸡尾酒排序 { int i,j,temp,tail = size - 1; for (i = 0;i<tail;) { for (j = tail;j > i;j--) { if(arr[j] < arr[j-1]) { temp = arr[j]; arr[j] = arr[j-1]; arr[j-1] = temp; } } i++; for (j = i;j < tail;j++) { if (arr[j] > arr[j+1]) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } tail--; } } void main() { int i,arr[] = {1,3,5,7,6,56,76,122,3}; Cocktail(arr,sizeof(arr)/sizeof(int)); for (i = 0;i<9;i++) { cout<<arr[i]<<" "; } cout<<"\n"; }
#include <iostream> using namespace std; void SelectSort(int* pData,int Count)//选择排序 { int i,j,iTemp,iPos; for (i = 0;i<Count-1;i++) { iTemp =pData[i]; iPos = i; for(j=i+1;j<Count;j++) { if (pData[j]<iTemp) { iTemp = pData[j]; iPos = j; } } pData[iPos] = pData[i]; pData[i] = iTemp; } } void main() { int i,data[] = {10,9,8,7,6,5,4}; SelectSort(data,7); for (i=0;i<7;i++) { cout<<data[i]<<" "; } cout<<endl; }
#include <iostream> using namespace std; void InsertSort(int* pData,int Count)//插入排序 { int i,iPos,iTemp; for (i=1;i<Count;i++) { iTemp = pData[i]; iPos = i-1; while ((iPos>=0)&&(iTemp<pData[iPos])) { pData[iPos+1] =pData[iPos]; iPos--; } pData[iPos+1] = iTemp; } } void main() { int i,data[] = {10,9,8,7,6,5,4}; InsertSort(data,7); for (i=0;i<7;i++) { cout<<data[i]<<" "; } cout<<"\n"; }
#include <iostream> using namespace std; void merge(int *pData,int p,int q,int r)//归并排序 { int i,k; int begin1,end1,begin2,end2; int *temp=new int[r-p+1]; begin1=p; end1=q; begin2=q+1; end2=r; k=0; while(begin1<=end1 && begin2<=end2) { if (pData[begin1]<pData[begin2]) { temp[k++]=pData[begin1++]; } else { temp[k++]=pData[begin2++]; } } while(begin1<=end1) { temp[k++]=pData[begin1++]; } while (begin2<=end2) { temp[k++]=pData[begin2++]; } for (i=0;i<(r-p+1);i++) { pData[p+i]=temp[i]; } delete []temp; } void merge_sort(int *pData,int first,int last) { int mid=0; if (first<last) { mid=(first+last)/2; merge_sort(pData,first,mid); merge_sort(pData,mid+1,last); merge(pData,first,mid,last); } } void main() { int i,array[] ={1,5,2,6,3,10,9,18}; merge_sort(array,0,7); for (i=0;i<8;i++) { cout<<array[i]<<" "; } }
int Partition(int *pData,int low,int high)//快速排序 { int i = low; int j = high + 1; int temp = pData[low]; while(true){ while(pData[++i]<temp&&i<high); while(pData[--j]>temp);//循环跳出后,下标为j的数组值一定小于等于temp if(i>=j) break; if(i<j){ int temp = pData[i]; pData[i] = pData[j]; pData[j] = temp; } } pData[low] = pData[j]; pData[j] = temp; return j; } void QuickSort(int *pData,int low,int high) { if(low<high) { int tx = Partition(pData,low,high); QuickSort(pData,low,tx - 1); QuickSort(pData,tx+1,high); } } int main() { int i,pData[17]={23,32,41,55,86,7,37,100,5,9,3,4,1,8,2,6,10}; cout<<endl; QuickSort(pData,0,16); for(i = 0;i<17;++i) cout<<pData[i]<<' '; return 0; }
相关文章推荐
- python(三)6种排序算法性能比较(冒泡、选择、插入、希尔、快速、归并)
- 6种排序算法的简洁实现:冒泡、选择、插入、归并、快速、堆
- 6种排序算法的简洁实现:冒泡、选择、插入、归并、快速、堆
- 6种排序算法的简洁实现:冒泡、选择、插入、归并、快速、堆
- 6种排序算法的简洁实现:冒泡、选择、插入、归并、快速、堆
- 10种排序算法总结(冒泡、选择、插入、希尔、归并、快速、堆、拓扑、锦标赛、基数)
- 排序算法Java描述:选择、冒泡、插入、希尔、归并、快速及三向切分快速排序
- 常用排序算法总结(插入、冒泡、选择、希尔、快速、归并、堆)
- 数据结构 27 排序 排序-选择 插入 冒泡 希尔 快速归并 6种排序
- 七种排序算法总结(冒泡、插入、选择、希尔、归并、堆、快速)
- C++排序算法总结(冒泡、插入、选择、希尔、归并、快速、堆)
- C语言之各种排序法及核心思想(冒泡、鸡尾酒、选择、插入、二分法、希尔、堆、归并、快速)
- 排序算法大集合,插入、选择、冒泡、希尔、堆、归并、快速排序,总有一款适合你
- 常见排序算法(冒泡、选择、插入、快速、归并C++实现)
- 数据结构各种排序法及核心思想(冒泡、鸡尾酒、选择、插入、二分法、希尔、堆、归并、快速)
- 常用排序算法的c++实现(冒泡,选择,插入,堆,shell,快速,归并 )与sort()对比
- 排序算法总结与C++实现(冒泡、简单选择、直接插入、堆、归并、快速)
- 常见内部排序算法 简单数组实现与分析(快速(偶原创partition函数,望众高手指正)、归并、希尔、插入、选择、冒泡)
- 基本的排序算法(选择、插入、冒泡、希尔、归并、堆、快速)
- 六大经典排序算法(Java版):冒泡、选择、插入、希尔、快速、归并