选择排序:
N位元素,一位一位比较排序,将较小的数值排在前面,放在数组a[0]位置上,之后对N-1个元素进行排序在放置合适位置上,以此类推。
原理:一个元素与其他所有元素进行数值比较,排出最小的数放入第一位, 之后其他的数依次类推。
#include <bits/stdc++.h>
using namespace std;
int main(){
printf("请输入需要多少元素。\n");
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<n-1;i++){
int tmpMin = i;
for(int j=i+1;j<n;j++){
if(a[j] < a[tmpMin]){
tmpMin = j;
}
}
int tmp = a[i];
a[i] = a[tmpMin];
a[tmpMin] = tmp;
}
printf("调整后的元素:\n");
for(int i=0;i<n;i++){
printf("%d\t",a[i]);
}
printf("\n");
return 0;
}
插入排序:
将数组分为有序和无序两部分,有序在前,无序在后。
开始只有a[0]有序。每次取无序的靠近有序的数组的值,加入到有序部分。
原理:排出小的加入。其余元素后移一位。
#include <bits/stdc++.h>
using namespace std;
int main(){
printf("请输入需要多少元素。\n");
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<n;i++){
for(int j=0;j<i;j++){ //对于i以下的元素都已排好序,为有序部分。
if(a[j] > a[i]){
int tmp = a[i];
for(int k=i;k>j;k--){ //对于大的数,后移一位。
a[k] = a[k-1];
}
a[j] = tmp;
break;
}
}
}
printf("调整后的元素:\n");
for(int i=0;i<n;i++){
printf("%d\t",a[i]);
}
printf("\n");
return 0;
}
冒泡排序:
冒泡排序将数组a分为有序与无序两部分,不同于插入排序,冒泡排序开始整个数组都是无序的。
每次将最大的元素移动到有序部分第一个元素的左边。比较相邻两个元素,前面比后面大交换两个元素。
原理:排出最大的元素,依次缩小,最后为最小的值。
#include <bits/stdc++.h>
using namespace std;
int main(){
printf("请输入需要多少元素。\n");
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=n-1;i>0;i--){
for(int j=0;j<i;j++){ //先对0到n相邻元素排序,排出最大的,之后一次缩小。
if(a[j] > a[j+1]){
int tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
printf("调整后的元素:\n");
for(int i=0;i<n;i++){
printf("%d\t",a[i]);
}
printf("\n");
return 0;
}