Quicksort: O (n- 2 )
真正正确的快速排序: #include<iostream> #include<cstdio> using namespace std; int a[100]; /*void swap(int a,int b){ int tmp; tmp=a; a=b; b=tmp; }*/ void quicksort(int left,int right){ int i,j,t; if(left>right) return; int temp=a[left]; i=left; j=right; while(i<j){ while(a[j]>temp&&i<j) j--; a[i]=a[j]; while(a[i]<temp&&i<j) i++; a[j]=a[i]; } a[i]=temp; quicksort(left,i-1); quicksort(i+1,right); } int main(){ int num; cin>>num; for(int i=1;i<=num;i++) scanf_s("%d",&a[i]); quicksort(1,num); for(int i=1;i<=num;i++) cout<<a[i]<<endl; return 0; }
Insertion sort: O (n- 2 )
#include <the iostream> #include <cstdio> the using namespace STD; int A [100]; int main () { int n-; CIN n->>; for (int I = 0; I <n-; I ++) CIN >> A [I]; for (int I =. 1; I <n-; I ++) {// I mean it is the first few numbers are compared IF (a [I] <a [-I. 1]) { int J = I- . 1; int X = a [I]; the while (J> = 0 && a [J]> X) { a [J +. 1] = a [J]; // find the case before the number is greater than after the number of the later figures after the move. J,; } A [+ J. 1] = X; // comparing the number of insert } } for (int I = 0; I <n-; I ++) COUT << A [I] << endl; return 0 ;
Merge sort: O (nlogn)
#include <iostream> #include <vector> using namespace std; void merge(vector<int> &arr,int L,int mid,int R){ int *help = new int(R-L+1); int p1=L,p2=mid+1,i=0; while(p1<=mid && p2<=R) { help[i++] = arr[p1]>arr[p2] ? arr[p2++] : arr[p1++]; } while(p1<=mid) help[i++] = arr[p1++]; while(p2<=R) help[i++] = arr[p2++]; for (int i=0;i<R-L+1;i++) { arr[L+i] = help[i]; } } void sortprocess(vector<int> &arr,int L,int R) { if (L < R) { int mid = L + ((R-L)>>2); // (L+R)/2 sortprocess(arr,L,mid); sortprocess(arr,mid+1,R); merge(arr,L,mid,R); }} void MergeSort(vector<int> &arr,int L,int R){ if (arr.size()<2) return; sortprocess(arr,L,R);} int main(){ vector<int> arr; int n,temp; cin>>n; //输入n个数 for (int i=0;i<n;i++) { cin>>temp; //输入数据 arr.push_back(temp); } MergeSort(arr,0,arr.size()-1); for(int i=0;i<arr.size();i++) cout<<arr[i]<<endl; system("pause"); return 0; }