C++排序(冒泡排序,插入排序,快速排序,归并排序)
冒泡排序
/* 2,6,4,32,12,9,55,26,37,73, 2,4,6,12,9,32,26,37,55,73, 2,4,6,9,12,26,32,37,55,73, 2,4,6,9,12,26,32,37,55,73, 2,4,6,9,12,26,32,37,55,73, 2,4,6,9,12,26,32,37,55,73, 2,4,6,9,12,26,32,37,55,73, 2,4,6,9,12,26,32,37,55,73, 2,4,6,9,12,26,32,37,55,73, 2,4,6,9,12,26,32,37,55,73, */ void sort1() { //冒泡排序 int array1[]={55,2,6,4,32,12,9,73,26,37}; int i,temp; for (int pass=1;pass<10;pass++) { for(i=0;i<10-pass;i++) { if (array1[i]>array1[i+1]) { temp=array1[i]; array1[i]=array1[i+1]; array1[i+1]=temp; } } for (i=0;i<10;i++) { cout<<array1[i]<<","; } cout<<endl; } for (i=0;i<10;i++) { cout<<array1[i]<<","; } return; }
插入排序
/* 2,55,|6,4,32,12,9,73,26,37, 2,6,55,|4,32,12,9,73,26,37, 2,4,6,55,|32,12,9,73,26,37, 2,4,6,32,55,|12,9,73,26,37, 2,4,6,12,32,55,|9,73,26,37, 2,4,6,9,12,32,55,|73,26,37, 2,4,6,9,12,32,55,73,|26,37, 2,4,6,9,12,26,32,55,73,|37, 2,4,6,9,12,26,32,37,55,73,| 2,4,6,9,12,26,32,37,55,73, */ void sort2() { //插入排序 int array1[]={55,2,6,4,32,12,9,73,26,37}; int inserter,index; for (int i=1;i<10;i++) { inserter=array1[i]; index=i-1; while (index>=0&&(inserter<array1[index])) { array1[index+1]=array1[index]; index--; } array1[index+1]=inserter; for (int j=0;j<10;j++) { cout<<array1[j]<<","; if (j==i) { cout<<'|'; } } cout<<endl; } for (int i=0;i<10;i++) { cout<<array1[i]<<","; } return; }
快速排序
/* 55,2,6,4,32,12,9,73,26,37, 26,2,6,4,32,12,9,73, 26,2,6,4,32,12,9, 4,2,6, 4,2, 2,4,6,9,32,12,26, 37,4,6,9,12,26,32, 26,4,6,9,12, 9,4,6, 4,6,9,12,26,32,37,2,73,55, 4,6,9,12,26,32,37,2,55,73, */ void swap(int& a,int& b) { int t=a; a=b; b=t; } void showarray(int a[],int len) { for (int i=0;i<len;i++) { cout<<a[i]<<","; } cout<<endl; } void qsort(int a[],int left,int right) { //showarray(a,right+1); int pivot=a[right],l=left,r=right; while (l<r) { swap(a[l],a[r]); /* int t=a[l]; a[l]=a[r]; a[r]=t; */ //showarray(a,r); while (l<r&&(a[r]>pivot)) { --r; } while (l<r&&(a[l]<=pivot)) { ++l; } swap(a[left],a[r]); /* t=a[left]; a[left]=a[r]; a[r]=t; */ if (left<r-1) { qsort(a,left,r-1); } if (r+1<right) { qsort(a,r+1,right); } } } //https://www.cnblogs.com/nicaicai/p/12689403.html void sort3() { //快速排序 int array1[]={55,2,6,4,32,12,9,73,26,37}; int len=sizeof(array1)/sizeof(int); for (int i=0;i<len;i++) { qsort(array1,0,len-1); } //showarray(array1,len); for (int i=0;i<len;i++) { cout<<array1[i]<<","; } return; }
归并排序 数列(42,15,20,6,8,38,50,12)
#include <stdio.h> #include <iostream> #include <algorithm> #include <cstdlib> #include <cmath> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ void merge(int* a, int low, int mid, int hight) //合并函数 { int* b = new int[hight - low + 1]; //用 new 申请一个辅助函数 int i = low, j = mid + 1, k = 0; // k为 b 数组的小标 while (i <= mid && j <= hight) { if (a[i] <= a[j]) { b[k++] = a[i++]; //按从小到大存放在 b 数组里面 } else { b[k++] = a[j++]; } } while (i <= mid) // j 序列结束,将剩余的 i 序列补充在 b 数组中 { b[k++] = a[i++]; } while (j <= hight)// i 序列结束,将剩余的 j 序列补充在 b 数组中 { b[k++] = a[j++]; } k = 0; //从小标为 0 开始传送 for (int i = low; i <= hight; i++) //将 b 数组的值传递给数组 a { a[i] = b[k++]; } delete[]b; // 辅助数组用完后,将其的空间进行释放(销毁) } void mergesort(int* a, int low, int hight) //归并排序 { if (low < hight) { int mid = (low + hight) / 2; mergesort(a, low, mid); //对 a[low,mid]进行排序 mergesort(a, mid + 1, hight); //对 a[mid+1,hight]进行排序 merge(a, low, mid, hight); //进行合并操作 } } void f1() { //归并排序 /* 归并排序是比较稳定的排序方法。它的基本思想是把待排序的元素分解成两个规模大致相等的子序列。 如果不易分解,将得到的子序列继续分解,直到子序列中包含的元素个数为1。 因为单个元素的序列本身就是有序的,此时便可以进行合并,从而得到一个完整的有序序列。 */ //步骤一:首先将待排序的元素分成大小大致相同的两个序列。 //步骤二:再把子序列分成大小大致相同的两个子序列。 //步骤三:如此下去,直到分解成一个元素停止,这时含有一个元素的子序列都是有序的。 //步骤四:进行合并操作,将两个有序的子序列合并为一个有序序列,如此下去,直到所有的元素都合并为一个有序序列。 int n, a[100]; cout << "请输入数列中的元素个数 n 为:" << endl; cin >> n; cout << "请依次输入数列中的元素:" << endl; for (int i = 0; i < n; i++) { cin >> a[i]; } mergesort(a, 0, n-1); cout << "归并排序结果" << endl; for (int i = 0; i < n; i++) { cout << a[i] << " "; } cout << endl; } int main(int argc, char** argv) { f1(); return 0; }
浙公网安备 33010602011771号