在這裏插入代碼片# 排序算法總結(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;
}