目前学习到了三种基础的排序方法,分别为冒泡排序,选择排序,插入排序。以下为这三排序方法的整理。
一.冒泡排序
![](https://img-blog.csdnimg.cn/img_convert/a92af7e11f2142329d2451f660650f0c.gif)
冒泡排序是相邻两个数之间进行比较,大的数(或者小的 看题目要求)靠后,就像气泡一样,两个泡泡大的沉下去,小的浮起来。每次完成一个大排之后,最大的一个数就会移至末尾(因为在比较中它始终处于最大)。所以对于这种排序方法,应该考虑双重循环,第一层循环就是判断像这样的“大排”一共有几次,对于n个数而言,“大排”应该有n-1次。第二层循环,则是相邻数两两比较大小,交换次序,而且因为“大排”的原因,每完成一次“大排”,末尾的数就固定了,无需考虑进第二次循环。相应进行n-i-1次循环(i是大排次数)。
int arr[10]={1,3,6,8,7,9,2,4,0,5}
for(int i=0;i<9;i++){
for(int j=0;j<9-i;j++){
if arr[j]>arr[j+1]{
t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
二.选择排序
![](https://img-blog.csdnimg.cn/img_convert/e67560f0b079b0dbb796054190edca60.gif)
冒泡排序是先排序好大数,那么选择排序就是先将小数排列好。选择排序就是将第一个数与后面所有数相比较,如果后面的数中有比它小的数,同时这个数还是后面这些数中最小的,那么将第一个数和这个小数交换位置,因此确定好了最小的数的位置。一样是双重循环,第一重与冒泡一致,第二重循环和冒泡相反,以下为代码。
int arr[6]={1,3,6,4,2,7};
for(int i=0;i<5;i++){
for(int j=i+1;j<6;j++){
if(arr[j]<arr[i]){
t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
}
三.插入排序
![](https://img-blog.csdnimg.cn/img_convert/af713217e962fa6fef59ea793783d264.gif)
插入排序是将待插入元素一个个插入初始已有序部分中的过程,插入的位置遵循了始终保持有序的规则,从后往前枚举已有序部分来确定插入位置。双重循环,第一重仍然考虑大体次数,因为最初的第一个元素不参与和前面交换(因为没有),所以第一重循环n-1次。
for(int i=1;i<n;i++){
int temp=arr[i],j=i;
while(j>1&&temp<arr[j-1]){
arr[j]=arr[j-1];
j--;
}
arr[j]=temp;
}
}