多种排序算法c++(冒泡排序、直接插入排序、快排算法、直接选择、归并排序)

xiaoxiao2025-05-01  13

#include<iostream> using namespace std; void fn(int arr[],int n)//冒泡排序 { for(int i=0;i<n-1;i++) { for(int j=0;j<n-i-1;j++) { if(arr[j]>arr[j+1]) { int m=arr[j]; arr[j]=arr[j+1]; arr[j+1]=m; } } } } void insertfn(int arr[],int n)//直接插入排序 { for(int i=1;i<n;i++) { int j=i; while(j>0 && arr[j]<arr[j-1]) { int m=arr[j]; arr[j]=arr[j-1]; arr[j-1]=m; j--; } } } void choosefn(int arr[],int n)//直接选择排序 { for(int i=0;i<n;i++) { int min=i; for(int j=i+1;j<n;j++) { if(arr[j]<arr[min]) { min=j; } } int m=arr[i]; arr[i]=arr[min]; arr[min]=m; } } int fastfn(int arr[],int left,int right)//快速排序 { int flag=arr[left]; while(left<right) { while(arr[right]>=flag&&left<right) right--; //大于flag!! if(right>left){ arr[left]=arr[right]; left++; } while(arr[left]<flag && left<right) left++; if(right>left){ arr[right]=arr[left]; right--; } } arr[left]=flag; return left; } void quick(int arr[],int left,int right){ if(left<right){ int i=fastfn(arr,left,right); quick(arr,left,i-1); quick(arr,i+1,right); } } //下面是归并排序 void organize(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++) //将temp值传回去 a[first+i]=temp[i]; } void organization(int a[],int first,int last,int tmp[]){ if(first<last){ int mid=(first+last)/2; organization(a,first,mid,tmp); //左边有序 organization(a,mid+1,last,tmp); //右边有序 organize(a,first,mid,last,tmp); } } void soto(int a[],int n) //归并排序 { int *p = new int[n]; if(p==NULL) return; organization(a,0,n-1,p); delete[] p; } int main() { int arr[]={4,3,2,1}; int a[]={5,4,3,2,1}; //fn(arr,4); //insertfn(arr,4); //choosefn(arr,4); //quick(arr,0,3); soto(a,5); for(int b=0;b<5;b++) { cout<<a[b]<<endl; } }

都能跑\(-_____-)/

转载请注明原文地址: https://www.6miu.com/read-5029544.html

最新回复(0)