32,74,25,53,28,43,86,37中元素从小到大顺序排列

来源:百度知道 编辑:UC知道 时间:2024/09/28 15:51:49
将数组(32.74,25,53,28,43,86,37)中的元素按从小到大的顺序排列,每次可以交换任意两个元素,最少需要交换几次?需要过程

#include "stdio.h"
int count;
void quicksort(int data[], int low,int high)
{/*用快速排序方法数组元素data[low..high]作排序*/
int i,pivot,j;
if(low<high)/*以数组的第一个元素为基准进行划分*/
{
pivot=data[low];
i=low;
j=high;
while(i<j)/*从数组的两端交替地向中间扫描*/
{
while(i<j&&data[j]>=pivot)j--;
if(i<j) {data[i++]=data[j];count++;}/*比枢轴元素小者移到低下标端*/
while(i<j&&data[i]<=pivot) i++;
if(i<j) {data[j--]=data[i];count++;}/*比枢轴元素大者移到高下标端*/
}
data[i]=pivot;/*枢轴元素移到正确的位置*/
quicksort(data,low,i-1);/*对前半个子表递归排序*/
quicksort(data,i+1,high);/*对后半个子表递归排序*/
}
}
void main()
{
count=0;
int a[]={32,74,25,53,28,43,86,37};
quicksort(a,0,7);
for(int i=0;i<8;i++)
{
printf("%d ",a[i]);
}
printf("/n%d",count);
}

排序中快速排序平均性能最好。用快速排序,8次可以搞定。