//编写人:naruuu
//编写功能:排序算法的实现
//编写时间:12 11
#include <stdio.h>
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define N 1000
int arr[N];
/* 对长度为n的数组arr执行冒泡、插入、选择排序 */
void bubbleSort(int arr[], int n);
void insertionSort(int arr[], int n);
void selectionSort(int arr[], int n);
/* 打印长度为n的数组arr */
void printArray(int arr[], int n);
void swap(int *xp, int *yp) {
int temp = *xp;
*xp = *yp;
*yp = temp;
}
int main() {
int n, i,a[N];
cout<<"请输入要排序的数组的长度:"<<endl;
cin >> n;
cout << "请输入要排序的数组:" << endl;
for (i = 0; i < n; ++i) {
cin >> arr[i];
}
for(i=0;i<n;i++)a[i]=arr[i];
bubbleSort(a, n);
for(i=0;i<n;i++)a[i]=arr[i];
insertionSort(a,n);
for(i=0;i<n;i++)a[i]=arr[i];
selectionSort(a,n);
//printArray(arr, n);
return 0;
}
/* 打印长度为n的数组arr */
void printArray(int arr[], int n) {
int i;
for (i = 0; i < n; i++) {
cout << arr[i];
if (i < n - 1) /* 下标0..n-2每个元素后面有个空格 */
cout << " "; /*下标n-1,也就是最后一个元素后面没有空格*/
}
cout << endl; /* 一行打印完后换行 */
}
void insertionSort(int arr[], int n){
int i,j,t;
int tang=0;
printf("插入排序:\n");
for(i=1;i<n;i++){ //arr[i]插入到前面的有序序列中
if(arr[i]<arr[i-1])
{
t=arr[i];
arr[i]=arr[i-1];
for(j=i-2;j>=0;j--)
{
if(t<arr[j]) arr[j+1]=arr[j];
else break;
}
arr[j+1]=t;
}
cout << "第" << ++tang << "趟:";
printArray(arr,n);
}
}
void selectionSort(int arr[], int n){
int i,j,t,x;
int tang=0;
cout << "选择排序" << endl;
for(i=n-1;i>=1;i--){
t=0;
for(j=1;j<=i;j++){
if(arr[t]<arr[j]) t=j;
}
x=arr[t];
arr[t]=arr[i];
arr[i]=x;
cout << "第" << ++tang << "趟:";
printArray(arr,n);
}
}
void bubbleSort(int arr[], int n){
int i,j;
int tang=0;
cout << "冒泡排序" << endl;
for(j=n-1;j>=1;j--){
for(i=0;i<j;i++){
if(arr[i]>arr[i+1]){
int t=arr[i];arr[i]=arr[i+1];arr[i+1]=t;
}
}
cout << "第"<< ++tang<< "趟:";
printArray(arr,n);
}
}
/*测试结果:
/*
输入样例:
10
1 19 9 11 4 3 5 8 10 6
输出样例:
请输入要排序的数组的长度:
10
请输入要排序的数组:
1 19 9 11 4 3 5 8 10 6
冒泡排序
第1趟:1 9 11 4 3 5 8 10 6 19
第2趟:1 9 4 3 5 8 10 6 11 19
第3趟:1 4 3 5 8 9 6 10 11 19
第4趟:1 3 4 5 8 6 9 10 11 19
第5趟:1 3 4 5 6 8 9 10 11 19
第6趟:1 3 4 5 6 8 9 10 11 19
第7趟:1 3 4 5 6 8 9 10 11 19
第8趟:1 3 4 5 6 8 9 10 11 19
第9趟:1 3 4 5 6 8 9 10 11 19
插入排序:
第1趟:1 19 9 11 4 3 5 8 10 6
第2趟:1 9 19 11 4 3 5 8 10 6
第3趟:1 9 11 19 4 3 5 8 10 6
第4趟:1 4 9 11 19 3 5 8 10 6
第5趟:1 3 4 9 11 19 5 8 10 6
第6趟:1 3 4 5 9 11 19 8 10 6
第7趟:1 3 4 5 8 9 11 19 10 6
第8趟:1 3 4 5 8 9 10 11 19 6
第9趟:1 3 4 5 6 8 9 10 11 19
选择排序
第1趟:1 6 9 11 4 3 5 8 10 19
第2趟:1 6 9 10 4 3 5 8 11 19
第3趟:1 6 9 8 4 3 5 10 11 19
第4趟:1 6 5 8 4 3 9 10 11 19
第5趟:1 6 5 3 4 8 9 10 11 19
第6趟:1 4 5 3 6 8 9 10 11 19
第7趟:1 4 3 5 6 8 9 10 11 19
第8趟:1 3 4 5 6 8 9 10 11 19
第9趟:1 3 4 5 6 8 9 10 11 19
*/
04-22