喜刷刷

来源:互联网 发布:js获取某个标签 编辑:程序博客网 时间:2024/04/29 12:17

二进制中1的个数

int numberOf1(int num){int i=1;int count=0;while(i){if(num&i){count++;}i=i<<1;}return count;}


选择第一个数为key,将数组分为两部分,左边小于key,右边大于key 

int partition(int* a, int s, int t){while(s<t){while(a[s]<a[t])t--;swap(a[s],a[t]);while(a[s]<a[t])s++;swap(a[s],a[t]);}return s;}


快排

void quicksort(int* a, int s, int t){if(s>=t)return;swap(a[s],a[s+rand()%(t-s+1)]);int m=partition(a, s, t);quicksort(a, s, m-1);quicksort(a, m+1, t);}


数组中的从小到大的第k个数

int theKthNum(int* a, int s, int t, int k){swap(a[s],a[s+rand()%(t-s+1)]);int m=partition(a, s, t);if(m-s==k-1) return a[m];if(m-s>k-1) theKthNum(a, s, m-1, k);else theKthNum(a, m+1, t, k-(m-s+1));}

归并排序

void merge_(int* a, int s, int t){int b[5];int m = (s+t)/2;int k=s;int i=s,j=m+1;for(i,j; i<=m && j<=t;){if(a[i]<a[j]){b[k++]=a[i++];}else{b[k++]=a[j++];}}if(i>m){for(j; j<=t; j++)b[k++]=a[j];}if(j>t){for(i; i<=m; i++)b[k++]=a[i];}for(int i=s; i<=t; i++)a[i]=b[i];}void mergesort(int* a, int s, int t){if(s==t)return;int m = (s+t)/2;mergesort(a, s, m); mergesort(a, m+1,t);merge_(a, s, t);}


堆排序

void heapadjust(int* a, int s, int t){int j=s;int k = 2*s + 1;for(int i=k; i<=t; i=2*i+1){if(i<t && a[i]<a[i+1]) i++;if(a[j]<a[i]){swap(a[j],a[i]);j=i;}else break;}}void heapsort(int* a, int t){for(int i=(t-1)/2; i>=0; i--)heapadjust(a, i, t);for(int i=t; i>0; i--){swap(a[0], a[i]);heapadjust(a, 0, i-1);}}











0 0
原创粉丝点击