在这里插入代码片# 排序算法总结(C++实现)
思想总结:
冒泡排序
对一个数组进行一趟遍历,当当前遍历的数字比后一个数字大的时候,两数字交换,这样遍历一遍之后,会将最大的数字放置到数组的最后端;第二次,将倒数第二大的数字放到数组的倒数第二个位置,,,;遍历arr.length次之后,就实现了从小到大的排序。
选择排序
选择排序的中心思想是将为每一个位置选出合适的数字,仍旧遍历数组,第一次遍历时,选出最小的数字,即每次将当前遍历得到的最小的数字的数组下标记录下来,和之后的数字进行对比,最终得到数组中最小的数字的下标,之后将该数字与第一个数字进行交换;开始第二次遍历,选出剩余数字中最小的数字,放到第二个位置,,,;这样遍历arr.length次之后,就为每一个位置选出了合适的数字。
插入排序
插入排序就是将数组分为两部分,前一部分为已经排好序的数组,后一部分为未排序的数组;从第一个数字开始,将第一个数字作为已排好序的数组,选取排好序数组的下一个数字作为待排序数字,与已经排好序的数组中的数字从后到前进行进行对比,若待排序数字小于所对比数字,则将该数字后移一位,指导待排序数字大于所选数字,停止往前对比,结束循环,将待排序数字放入该数字之后;然后选取下一个待排序数字,进行对比,,,,;最终将所有未排序数字排序完成即可。
快速排序
快速排序主要是应用递归的思想,在每一趟遍历的时候,选取一个标准值,将数组不断地分成大于标准值和小于标准值的两部分,然后对着两部分再进行遍历,,,,;具体的实现方式是,每次遍历取出第一个值作为标准值,然后从后往前,将每个值与标准值进行对比,若该值大于等于标准值,则顺序对比前一个值,直至对比完成,反之则结束循环,将该值存到之前标准值取值的位置(请记住这一点,因为当你去取出标准值的时候,相当于此处为空了,所以可以将该值放置到此处);然后再从前往后,将每个值与标准进行对比,做该值小于等于标准值,则顺序对比后一个值,直至对比完成,反之则结束循环,将该值存到上一次从后往前对比时调整的数字位置,,,,;这样一直进行循环,直至遍历完每一个数字,最后结束遍历之后,将标准值再存入数组中,此时标准值左侧的数字全部小于标准值,右侧的数字全部大于标准值;然后对这两部分再次进行快速排序,,,,;
该算法的实现个人认为较为难与想象,建议手动取一个数组,在对数组进行手动模拟算法过程,以此来增强理解。
代码实现如下
#include <iostream>
using namespace std;
class mySort
{
public:
int arr[];
/*冒泡排序*/
public:
void Bubble_sort()
{
int a,b;
int arr[100];
cin>>a;
for(int i=0;i<a;i++)
{
cin>>arr[i];
}
for(int i=0;i<a-1;i++)
{
for(int j=0;j<a-i-1;j++)
{
if(arr[j]>arr[j+1])
{
b=arr[j];
arr[j]=arr[j+1];
arr[j+1]=b;
}
}
}
for(int i=0;i<a;i++)
cout<<arr[i];
}
/*选择排序*/
public:
void Selection_sort()
{
int a,b,c=0,m;
int arr[100];
cin>>a;
for(int i=0;i<a;i++)
{
cin>>arr[i];
}
for(int i=0;i<a;i++)
{
b=i;
for(int j=i+1;j<a;j++)
{
if(arr[b]>arr[j])
{
b=j;
}
}
m=arr[b];
arr[b]=arr[i];
arr[i]=m;
}
for(int i=0;i<a;i++)
{
cout<<arr[i];
}
}
/*插入排序*/
public:
void Insertion_sort()
{
int a,b;
int arr[100];
cin>>a;
for(int i=0;i<a;i++)
{
cin>>arr[i];
}
for(int i=0;i<a;i++)
{
int flag=arr[i+1];
int j=i+1;
while (flag<arr[j-1]&&j>0)
{
arr[j]=arr[j-1];
j--;
}
arr[j]=flag;
}
for(int i=0;i<a;i++)
cout<<arr[i];
}
/*快速排序*/
public:
void Quick_sort(int arr[],int a,int b)
{
if(a>=b)
return;
int low=a,heigh=b;
int key=arr[low];
while(low<heigh)
{
while(low<heigh && arr[heigh]>=key)
--heigh;
arr[low] = arr[heigh];
while (low<heigh && arr[low]<=key)
++low;
arr[heigh] = arr[low];
}
arr[low] = key;
Quick_sort(arr,a,low-1);
Quick_sort(arr,low+1,b);
}
};
int main()
{
mySort a;
//a.Bubble_sort();
//a.Selection_sort();
//a.Insertion_sort();
int in;
int arr[100];
cin>>in;
for(int i=0;i<in;i++)
{
cin>>arr[i];
}
a.Quick_sort(arr,0,in-1);
for(int i=0;i<in;i++)
cout<<arr[i];
return 0;
}