当前位置: 代码迷 >> 综合 >> 快速排序C/C++代码实现
  详细解决方案

快速排序C/C++代码实现

热度:4   发布时间:2023-10-21 04:52:49.0

2021年8月18日09:02:13

#include<stdio.h>
//2021年8月17日21:43:13
int median3(int n[],int a,int b,int c)
{if((n[a]>=n[b] && n[a]<=n[c] )|| (n[a]<=n[b] && n[a]>=n[c])) return a;if((n[b]>=n[a] && n[b]<=n[c] )|| (n[b]<=n[a] && n[b]>=n[c])) return b;if((n[c]>=n[b] && n[c]<=n[a])|| (n[c]<=n[b] && n[c]>=n[a])) return c;//if(n[c]>n[b] && n[c]<n[a]|| n[c]<n[b] && n[c]>n[a]) return c;return 0;
}
void swap (int *a,int *b)
{int t=*a;*a=*b;*b=t;
}
void quicksort(int a[],int left,int right)
{if(right-left<1) return; int pivot=median3(a,left,right,(left+right)/2);swap(&a[pivot],&a[right]);int i=0,j=right-1;for(;;){while(a[i]<a[right]) i++;while(a[j]>a[right]) j--;if(i<j) swap(&a[i],&a[j]);else{swap(&a[i],&a[right]);quicksort(a,left,i-1);quicksort(a,i+1,right);break;}}
}
void quick_sort(int a[],int n)
{quicksort(a,0,n-1);
}
int main()
{int a[10]={1,4,7,9,2,8,6,3,0,5};quick_sort(a,10);for(int i=0;i<10;i++){printf("%d ",a[i]);}
}

有错误但结果正确的代码

(错误:右指针j指向right  right-left<=1)

#include<stdio.h>
void swap(int *a,int *b)
{int t=*a;*a=*b;*b=t;
}
int median3(int m[],int a,int b,int c)
{if((m[a]>m[b]&& m[a]<m[c]) || (m[a]<m[b] &&m[a]>m[c])) return a;if((m[b]>m[a]&& m[b]<m[c]) || (m[b]<m[a] &&m[b]>m[c])) return b;if((m[c]>m[b]&& m[c]<m[a]) || (m[c]<m[b] &&m[c]>m[a])) return c;else return 0;
}
void quicksort(int a[],int left,int right)
{if(right-left<=1) return ;int pivot=median3(a,left,(left+right)/2,right);swap(&a[right],&a[pivot]);int i=left,j=right;for(;;){while(a[i]<a[right])i++;while(a[j]>a[right]) j--;if(i<j) swap(&a[i],&a[j]); else {swap(&a[i],&a[right]);break;}}quicksort(a,left,i-1);quicksort(a,i+1,right);}
void quick_sort(int a[],int n)
{quicksort(a,0,n-1);
}
int main()
{int a[10]={0,2,533,1,312,4,7,19,8,6};quick_sort(a,10);for(int i=0;i<10;i++) printf("%d ",a[i]);
}

  相关解决方案