2.1 插入排序
C++实现:
#include<iostream> using namespace std; void InsertSort(int arr[],int n) { int i,j,key; for(i=1;i<n;++i) { key=arr[i]; j=i-1; while(j>=0&&key<arr[j]) { arr[j+1]=arr[j]; j--; } arr[j+1]=key; } } int main() { int arr[10]={14,25,53,23,2,6,74,34,67,39}; InsertSort(arr,10); for(auto a:arr) cout<<a<<' '; cout<<endl; }
2.3 分治法
合并操作代码
#include<iostream> using namespace std; void Merge(int arr[],int p,int q,int r) { int i=0,j=0; int k; int n1=q-p+1; int n2=r-q; int temp[r-p+1]; for(k=0;k<r-p+1;++k) { if(i<n1&&j<n2&&arr[p+i]<=arr[q+1+j]) { temp[k]=arr[p+i]; i++; } else if(i<n1&&j<n2&&arr[p+i]>arr[q+1+j]) { temp[k]=arr[q+1+j]; j++; } else if(i==n1||j==n2) break; } while(j<n2) { temp[k++]=arr[q+1+j]; j++; } while(i<n1) { temp[k++]=arr[p+i]; i++; } for(k=0;k<r-p+1;++k) cout<<temp[k]<<' '; cout<<endl; } int main() { int arr[10]={1,6,9,12,56,2,31,45,67,78}; Merge(arr,0,4,9); }
2.3.1 合并排序
#include<iostream> using namespace std; void Merge(int arr[],int p,int q,int r); void MergeSort(int arr[],int p,int r) { int q; if(p < r) //只有一个或无记录时不须排序 { q = (int)((p+r)/2); //将data数组分成两半 MergeSort(arr, p, q); //递归拆分左数组 MergeSort(arr, q+1, r); //递归拆分右数组 Merge(arr, p, q, r); //合并数组 } } /*int main() { int arr[10]={1,6,8,2,4,9,67,34,27,89}; MergeSort(arr,0,9); }*/ int main() { int arr[10]={1,23,55,67,89,2,34,57,76,90}; int k; for(k=0;k<10;++k) { cout<<arr[k]<<" "; } cout<<endl; MergeSort(arr,0,9); for(k=0;k<10;++k) { cout<<arr[k]<<" "; } cout<<endl; } void Merge(int arr[],int p,int q,int r) { int i,j,k; int n1=q-p+1; int n2=r-q; int left[n1],right[n2]; for(i=0; i<n1;i++) //对左数组赋值 left[i] = arr[p+i]; for(j=0; j<n2;j++) //对右数组赋值 right[j] =arr[q+1+j]; i=j=0; k=p; while(i<n1&&j<n2) { if(left[i]<=right[j]) { arr[k++]=left[i++]; } else { arr[k++]=right[j++]; } } while(j<n2) { arr[k++]=right[j++]; } while(i<n1) { arr[k++]=left[i++]; } }
或者
//Merge.cpp #include<iostream> using namespace std; void Merge(int arr[],int p,int q,int r) { int i=0,j=0; int k; int n1=q-p+1; int n2=r-q; int temp[r-p+1]; for(k=0;k<r-p+1;++k) { if(i<n1&&j<n2&&arr[p+i]<=arr[q+1+j]) { temp[k]=arr[p+i]; i++; } else if(i<n1&&j<n2&&arr[p+i]>arr[q+1+j]) { temp[k]=arr[q+1+j]; j++; } else if(i==n1||j==n2) break; } while(j<n2) { temp[k++]=arr[q+1+j]; j++; } while(i<n1) { temp[k++]=arr[p+i]; i++; } for(k=0;k<r-p+1;++k) arr[p++]=temp[k]; } //MergeSort.cpp #include<iostream> using namespace std; void Merge(int arr[],int p,int q,int r); void MergeSort(int arr[],int p,int r) { int q; if(p < r) //只有一个或无记录时不须排序 { q = ((p+r)/2); //将data数组分成两半 MergeSort(arr, p, q); //递归拆分左数组 MergeSort(arr, q+1, r); //递归拆分右数组 Merge(arr, p, q, r); //合并数组 } } /*int main() { int arr[10]={1,6,8,2,4,9,67,34,27,89}; MergeSort(arr,0,9); }*/ int main() { int arr[10]={1,23,55,67,89,2,34,57,76,90}; int k; for(k=0;k<10;++k) { cout<<arr[k]<<" "; } cout<<endl; MergeSort(arr,0,9); for(k=0;k<10;++k) { cout<<arr[k]<<" "; } cout<<endl; }
时间: 2024-09-16 06:21:52