您的位置:首页 > 理论基础 > 数据结构算法

【数据结构学习笔记】——排序

2016-01-28 11:22 696 查看

冒泡排序

思想

一列数据,从第一个开始检查,检查与下一个元素的大小,如果前者大于后者,则交换位置。一次排序可以使最大的元素位于最后的位置。

代码

void bubble(int a[],int n){  //一次冒泡
for(int i=0;i<n-1;i++)
if(a[i]>a[i+1])
swap(a[i],a[i+1]);//交换位置函数
}


上面代码无论原序列是否排序,都需要检查。时间复杂度总是 O(n^2)

void bubblesort (int a[],int n){
for(bool sorted=false;sorted=!sorted;n--)
for(int i=0;i<n;i++){
if(a[i]>a[i+1]){
swap(a[i],a[i+1]);
sorted=false;
}
}

}


解释:
sorted=!sorted
是将
sorted
值反转。
=
是赋值,
是非。在c++中
!=
是不等于判断符号。

所以,如果进行了交换,那么就将
sorted
置于否,说明排序没有完成。如果已经有序,
sorted
则变为真,在反转之后变为假,循环结束。排序完成。

直接插入排序

思想

一列序列,若只有一个元素,则肯定是有序的。我们从第二个开始看起,与前面的元素进行比较,放入它应该存在的位置,直到最后一个元素放入,排序完成。

代码

void insertionsort (int a[],int n)
{
for (int i=1;i<n;i++)
{
int j,temp;
temp=a[i];
for (j=i-1;j>=0&&temp<a[j];j--)
{
a[j+1]=a[j];
}
a[j+1]=temp;
}
}


解释:将每一个准备新插入进来的元素赋给temp,与它前面元素开始比较,选择插入位置。

选择排序

思想

遍历所有元素,选出最大的放在最后的位置,则一次过后将元素个数缩小为n-1个。

代码

void selectionsort(int a[],int n){
bool sorted=false;
for(int size=n;!sorted&&(size>1);size--){
int pos=0;
sorted=true;
for(int i=1;i<size;i++)
if(a[pos]<=a[i]) pos=i;  //选出最大的
else sorted=false;
swap(a[pos],a[size-1]);  //将最大的放在数组最后一个
}
}


快速排序

思想

在一列数组中,选取一个key值(本代码取第一个),经过一次排序之后将序列分为两部分,左侧部分都比key值小,右侧部分都比key值大(但各个部分中是无序的)。再进行0~key,key+1~n的排序。直到只剩下一个元素。

代码

void quicksort(int a[],int low,int high){

if(low >= high)   return;  //判断排序已经结束

int key=a[low];
int i=low,j=high;

while(i<j){
while(i<j&&a[j]>=key) --j;
swap(a[i],a[j]);        //a[i]=a[j]
while(i<j&&a[i]<=key) ++i;
swap(a[i],a[j]);        //a[j]=a[i] //也可行

}

quicksort(a,low,i-1);
quicksort(a,i+1,high);

}


生成随机数进行排序

int main()
{
srand ( time (NULL) );
int n;
cout<<"请输入你想要的数组大小 " ;
cin>>n;
int a
;                //输入你想要的数组大小
for ( int i = 0 ; i < n; i ++ )
a[i]=rand() %10000;    //生成随机数组

cout<<"排序之前数组:";
for(int i=0;i<n;i++)
cout<<a[i]<<"\t";
cout<<endl;

quicksort(a, 0, sizeof(a) / sizeof(a[0]) - 1);

cout<<"排序之后数组:";
for(int i=0;i<n;i++)
cout<<a[i]<<"\t";

c
4000
out<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 数据结构 排序