最好情况下
- 冒泡排序
图解:
代码void bubble_sort(T arr[], int len) { int i, j; T temp; for (i = 0; i < len - 1; i++) for (j = 0; j < len - 1 - i; j++) if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } }
- 插入排序
图解:
代码:void InsertSort1(int A[],int n) { int i,j,temp; for(i=1;i<n;i++) { if(A[i]<A[i-1]) { temp=A[i]; for(j=i-1;j>=0&&A[j]>temp;--j) { A[j+1]=A[j]; } A[j+1]=temp; } } }
平均情况下
- 快速排序
图解:代码:
void Quick_sort(int left,int right,int arr[]) { if(left>=right) return; int i,j,base,temp; i=left,j=right; base=arr[left]; while(i<j) { while(arr[j]>=base && i<j)j--; while(arr[i]<=base && i<j)i++; if(i<j) { temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } arr[left]=arr[i]; arr[i]=base; Quick_sort(left,i-1,arr); Quick_sort(i+1,right,arr); }
- 堆排序
(等进神教我之后再填坑)
- 归并排序
代码:void merge(int low,int mid,int high) { int i=low,j=mid+1,k=low; while (i<=mid && j<=high) { if (a[i]<a[j]) b[k++]=a[i++]; else b[k++]=a[j++]; } while (i<=mid) b[k++]=a[i++]; while (j<=high) b[k++]=a[j++]; for (int i=low;i<=high;i++) a[i]=b[i]; } void mergesort(int x,int y) { if (x>=y) return; int mid=(x+y)/2; mergesort(x,mid); mergesort(mid+1,y); merge(x,mid,y); }