快速排序是一种基于递归的算法思想,他每次计算运行时会让前后两端大小分明!也就是前一段全部都小于后本段的数值!这就是一次运行过程,之后递归调用自身,使自身前后两段再进行一次计算,使之也出现前小后大的数值变化!一直到很小很小的区间,直到出现数值都有序!!!
开始时,先最前和最后比较大小,如果左小右大, j--向左走 <--------,直到左大右小,如果左大右小,交换值后, i++向右走 -------->,一直比较直到左小右大。。。。。。。最后结束是i==j;
如果左大右小, i++向右走 -------->
升序排序:
#include<iostream>
#include<stdio.h>
using namespace std;
int num[]= {49,38,65,97,76,13,27,49};
void quick_sort(int left,int right)
{
int i,j;
i=left,j=right;
if(left==right)
{
return;
}
while( left!= right )
{
while(num[right] >= num[left] && left!=right )
{
right--;
}
if(num[right] < num[left])
{
int change=num[right];
num[right]=num[left];
num[left]=change;
for(int a=0; a<sizeof(num)/sizeof(int); a++)
cout<<num[a]<<" ";
cout<<" in change"<<endl;
}
while(num[right] >= num[left] && left!=right )
{
left++;
}
if(num[right] < num[left])
{
int change=num[right];
num[right]=num[left];
num[left]=change;
for(int a=0; a<sizeof(num)/sizeof(int); a++)
cout<<num[a]<<" ";
cout<<" in change"<<endl;
}
}
quick_sort(i, (i+j)/2 );
quick_sort( (i+j)/2 + 1, j);
}
int main()
{
//cout<<num[sizeof(num)/sizeof(int)-1];
for(int a=0; a<sizeof(num)/sizeof(int); a++)
cout<<num[a]<<" ";
cout<<" the start"<<endl;
quick_sort(0, sizeof(num)/sizeof(int)-1 );//相当于长度减一
for(int a=0; a<sizeof(num)/sizeof(int); a++)
cout<<num[a]<<" ";
cout<<" the end"<<endl;
return 0;
}
降序算法:与升序算法相反,开始时是从左向右进行比较运算与交换后,再到进行从右到左的比较运算与交换
#include<iostream>
#include<cstring>
#include<vector>
#include<math.h>
#include<time.h>
#include <stdlib.h>
using namespace std;
int magic[21];
void quick_sort(int left,int right)
{
int i,j;
i=left,j=right;
if(left==right)
{
return;
}
while( left!= right )
{
while(magic[right] <= magic[left] && left!=right )
{
left++;
//right--;
}
if(magic[right] > magic[left])
{
int change=magic[right];
magic[right]=magic[left];
magic[left]=change;
for(int a=0; a<sizeof(magic)/sizeof(int); a++)
cout<<magic[a]<<" ";
cout<<" in change"<<endl;
}
while(magic[right] <= magic[left] && left!=right )
{
right--;
//left++;
}
if(magic[right] > magic[left])
{
int change=magic[right];
magic[right]=magic[left];
magic[left]=change;
for(int a=0; a<sizeof(magic)/sizeof(int); a++)
cout<<magic[a]<<" ";
cout<<" in change"<<endl;
}
}
quick_sort(i, (i+j)/2 );
quick_sort( (i+j)/2 + 1, j);
}
int main()
{
srand((unsigned)time(NULL));//初始化随机数种子
int x;
int cnt=0;
for(int i=1; i<=20; i++)
{
magic[i] = rand() % 100 + 1;
//cout<<magic[i]<<" ";
}
quick_sort(1,20);
for(int i=1; i<=20; i++)
{
//magic[i] = rand() % 100 + 1;
cout<<magic[i]<<" ";
}
return 0;
}