#include "mysort.h"
#include
#include
#include
#include
#include
#include
#include
using namespace std; //插入排序 时间复杂度 平均哦O(N^2) 完全有序时O(N) 空间复杂度O(1) 稳定 //思想:把待排序列分为有序序列和无序序列,然后将无序列的元素插入到有序序列,规则是从后往前找 //第一个比我小的,将比我大的往后移,找到后插入到第一个比我小的后面 void insertSort(int *arr,int len) { if(NULL == arr) return; for(int i=1;i
=0;j--) { if(arr[j]<=tmp) { break; } else { arr[j+1]=arr[j]; } } arr[j+1]=tmp; } } //希尔排序 时间复杂度 O(n^1.3 ~ n^1.5) 空间复杂度 O(1) 不稳定 //思想:对待排序列进行分组,利用插入排序越有序越快的特性,多次插入排序,最后必定只剩一个组(全部序列) void shell(int *arr,int len,int gap) { for(int i=gap;i
=0;j-=gap) { if(arr[j]<=tmp) { break; } else { arr[j+gap]=arr[j]; } } arr[j+gap]=tmp; } } void shellSort(int *arr,int len) { int brr[3]={5,3,1}; for(int i=0;i
arr[j+1]) { int tmp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=tmp; } } } } //快速排序 平均时间复杂度O(nlogn) 最坏的情况下 O(N^2) 空间复杂度(logn) 不稳定 //思想:选择基准,定义两个指针low,high,将比基准大的移到基准后面,比基准小的移到基准前面 int partition(int *arr,int start,int end) { int low=start; int hign=end; int tmp=arr[low]; while(low
=tmp) { hign--; } if(low == hign) { break; } else { arr[low]=arr[hign]; } while(low
start+1) { Quick(arr,start,index-1); } if(index
=tmp) { hign--; } if(low == hign) { break; } else { arr[low]=arr[hign]; } while(low
>1); if(low
arr[hign]) { swap(arr[mid],arr[hign]); } if(arr[low]>arr[hign]) { swap(arr[low],arr[hign]); } if(arr[mid]>arr[low]) { swap(arr[mid],arr[low]); } } return arr[low]; } int partition(int *arr,int start,int end) { int low=start; int hign=end; int tmp=midofvalue(arr,hign,low); while(low
=tmp) { hign--; } if(low == hign) { break; } else { arr[low]=arr[hign]; } while(low
=key) { if(arr[hign] == key) { swap(arr[right],arr[hign]); right--; rightlen++; } hign--; } arr[low]=arr[hign]; while(low
right && arr[i]!=key) { swap(arr[i],arr[j]); i++; j--; } QuickSort3(arr,first,low-leftlen-1); QuickSort3(arr,low+rightlen+1,last); }
排序算法Day1
最新推荐文章于 2024-08-21 18:08:18 发布