冒泡排序算法(对十个数进行排序)
#include <iostream>
using namespace std;
void bubblesort(int[], int n);
void swap(int &, int &);
int main() {
int a[10];
for (int i = 0; i < 10; i++) {
cin >> a[i];
}
bubblesort(a, 10);
for (int i = 0; i < 10; i++) {
cout << a[i]<<' ';
}
return 0;
}
void swap(int& a, int& b) {
int t;
t = a;
a = b;
b = t;
}
void bubblesort(int a[], int n) {
int tag;
for (int i = 0; i < n-1; i++) {//最多n-1轮排序
for (int j = n - 1; j > i; j--) {//一轮冒泡排序
tag = 0;
if (a[j] < a[j - 1]) {
swap(a[j], a[j - 1]);
tag = 1;//表明本轮发生了交换
}
}
if (tag == 0) {//表明本轮未发生交换,数组已经有序
return;
}
}
}
输入:1 2 3 4 5 6 7 8 9 0
输出:0 1 2 3 4 5 6 7 8 9
特别注意这里是j>i,因为冒泡排序每排序一次,就有一个元素的位置定下来了,我错写成了j>0
简单选择排序
#include <iostream>
using namespace std;
void sort(int[], int);
int main() {
int x[10] = { 4,7,1,9,7,4,80,34,25,13 };
sort(x,10);
for (int i = 0; i < 10; i++) {
cout << x[i] << ' ';
}
cout << endl;
return 0;
}
void sort(int a[], int n) {
int temp; //用于交换元素
for (int i = 0; i < n-1; i++) { //最多进行n-1趟
for (int j = i + 1, k=i; j < n; j++) { //j用于每轮遍历找最小值元素
if (a[j] < a[k]) { //k记录当前趟次最小元素
k = j;
}
if (j == n - 1) { //j已经遍历到数组最后一个元素,a[i]和a[k]交换
temp = a[k];
a[k] = a[i];
a[i] = temp;
}
}
}
}