二分查詢、快排、堆排
阿新 • • 發佈:2018-11-28
演算法思想不做贅述。
二分查詢:
int binarySearch(int *a,int len,int key){ int left=0,right=len-1; while(left<==right){ int mid=left+(right-left)/2; if(a[mid]==key) return mid; else if(a[mid]<key) left=mid+1; else right=mid-1; } return -1; }
快排:
void quickSort(int *a,int left,int right){ int i,j.mddle; i=left,j=right; middle=a[left+(right-left)/2]; while(i<j){ while(a[i]<middle&&i<right) i++; while(a[j]>middle&&j>left) j--; if(i<=j) swap(a[i++],a[j--]); } if(i<right) quickSort(a,i,right); if(j>left) quickSort(a,left,j); }
堆排:
void maxheap_down(int *a,int start,int end){ int c=start;//當前節點位置 int l=2*c+1;//左孩子 for(;l<=end;c=l,l=2*l+1){ if(l<end&&a[l]<a[l+1]) l++; if(a[c]>a[l]) break; else swap(a[c],a[l]); } } void heap_sort_asc(int *a,int n){ int i; for(i=n/2-1;i>=0;i--) maxheap_down(a,i,n-1); for(i=n-1;i>0;i--){ swap(a[0],a[i]); maxheap_down(a,0,i-1); } }