排序算法

来源:互联网 发布:万网如何解析域名 编辑:程序博客网 时间:2024/06/05 15:25
/************选择排序*************/void selectsort(int str[],int n){int i,j;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){if(str[i]>str[j]){swap(str[i],str[j]);}}}}/************选择排序*************//************堆排序***************/void HeadAdjust(int a[],int s,int len){int i,j;j = s*2+1;//数组是0开始的话注意是s*2+1而不是s*2;int term = a[s];while(j<len){if(j+1<len&&a[j]<a[j+1])//注意是比较j+1<len而不是j<lenj++; if(j<len&&term>=a[j]) //容易出错的地方,注意是term与a[j]比较break;a[s] = a[j];s = j;j = j*2+1;}a[s] = term;}void Headsort(int a[], int len){int i;for(i=len/2-1;i>=0;--i)//注意数组从0开始大的话初始值是len/2-1{HeadAdjust (a,i,len);}prin (a,len);}/************堆排序***************//************插入排序*************/void Insertsort(int a[],int len){int i,j;int term;for(i=1;i<len;i++){if(a[i]<a[i-1]){term = a[i];a[i] = a[i-1];for(j=i-2;a[j]>term;j--)a[j+1] = a[j];a[j+1] = term;}}prin (a,len);}/************插入排序*************//************快速排序*************/
void QuitSort(int arr[], int l, int r){int term = arr[l];int left = l;int right = r;if (l>r){return;}while (left<right){while (left<right&&arr[right]>term){right--;}if (left<right){arr[left++] = arr[right];}while (left < right&&arr[left] < term)left++;if (left < right){arr[right--] = arr[left];}}arr[left] = term;QuitSort(arr, l, left - 1);QuitSort(arr, left + 1, r);}


/************快速排序*************/

0 0