#include<iostream>
using namespace std;
void swap(int*a,int*b)
{
int temp=*a;
*a=*b;
*b=temp;
}
void quicksort(int* a,int start,int end)
{
if(start>=end)
return;
int temp=a[start];
int i=start;
int j=end+1;
while(1)
{
do
{
i++;
}while(i<end&&a[i]<temp);
do
{
j--;
}while(a[j]>temp);
if(i>j)
break;
swap(&a[i],&a[j]);
}
swap(&a[start],&a[j]);
quicksort(a,start,j-1);
quicksort(a,j+1,end);
}
int main()
{
int a[]={2,5,3,1,7,6,9,8,10};
int length=sizeof(a)/sizeof(int);
quicksort(a,0,length-1);
for(int i=0;i<length;i++)
cout<<a[i]<<" ";
cout<<endl;
}
思路:n个相同元素组成的数组,插入排序性能最好(每个元素需要移动的距离都为0),时间复杂度为o(n)。 快速排序的性能则很糟糕,n-1次划分每次划分都需要0(n)的时间来去掉一个元素,所以时间复杂度为O(n*n) 采取的对策是:采取两个内循环,第一个向右移过小元素,遇到大元素停止,第二个左移,遇到小元素停止。然后交换。这种方法 当遇到相同的元素时,停止扫描,交换a[i] 和 a[j]的值,这样虽然