#include <iostream>
#include <cstdio>
#include <cstring>
#define mid(x) x >> 1;
using namespace std;
const int M = 105;
int num[M];
int n;
void insertion_sort(int h){
int temp, j;
for(int i = h; i < n; i+=h){
temp = num[i];
for(j = i-h; j >= 0 && temp < num[j]; j-= h){
num[j+h] = num[j];
}
num[j + h] = temp;
}
}
void input(){
for(int i = 0; i < n; i++)
scanf("%d ", &num[i]);
}
void output(){
for(int i = 0; i < n; i++)
printf("%d ", num[i]);
printf("\n");
}
void shellsort() {
int i, m = n;
do{
m = m/3+1;
for(i = 0; i < m; i++)
insertion_sort(m);
}while(m > 1);
}
void BubbleSort(){
int i = n -1, j, last;
while(i > 0){
last = 0;
for (j = 0; j < i; j++) {
if(num[j+1] < num[j]){
swap(num[j+1], num[j]);
last = j; //后面没有发生交换说明后面已经有序;
}
}
i = last;
}
}
void quick_sort(int a[], int left, int right) {
if(left < right) {
int l = left, r = right, x = a[l]; //x是此次排序的标准点。
while(1) {
while(l < r && a[r] >= x) r--; //r找比他小的数,放在前面;
while(l < r && a[l] <= x) l++; //l找比他大的数放在后面。
if(l >= r) break;
swap(a[r], a[l]);
}
swap(a[left], a[l]);
output();
quick_sort(a, left, l-1);
quick_sort(a, l+1, right);
}
}
void merge_sort(int a[], int l, int h) {
if(l >= h) return;
int m = (l+h)/2;
merge_sort(a, l, m); //递归的形式排序,应先递归后调整;
merge_sort(a, m+1, h);
int *arr = new int[h-l+1]; //申请数组;
int k = 0;
int i = l, j = m + 1; //i j 分别表示两个半部分的开头位置
while(i <= m && j <= h) { //排序m两边的数据。
if(a[i] < a[j]) {
arr[k] = a[i];
k++, i++;
}
else {
arr[k] = a[j];
k++, j++;
}
}
if(i <= m) { //如果左边有剩余,则全部放入arr数组中。
while(i <= m) {
arr[k] = a[i];
k++, i++;
}
}
if(j <= h) { //如果右边有剩余,则也全部放入arr数组中;
while(j <= h) {
arr[k] = a[j];
k++, j++;
}
}
for(i = l; i <= h; i++) { //把此段排好序的放回原数字。
a[i] = arr[i-l];
}
delete []arr; //释放申请的空间。
}
void selectsort(){
int temp;
for(int i = 0; i < n; i++){
temp = i;
for(int j = i + 1; j < n; j++){
if(num[j] < num[temp])
temp = j;
}
swap(num[i], num[temp]);
}
}
int main()
{
freopen("a.txt","r",stdin);
// freopen("bb.txt","w",stdout);
while(scanf("%d", &n) != EOF){
input();
output();
// insertion_sort(1); //直接插入排序算法. 稳定排序算法
// shellsort(); // 希尔排序算法 不稳定排序算法
// BubbleSort(); //冒泡排序算法;稳定算法。
//quick_sort(num, 0, n-1); //快速排序
//merge_sort(num, 0, n-1); //合并排序
selectsort(); //选择排序;
output();
}
return 0;
}
各种排序算法
最新推荐文章于 2024-01-07 12:17:20 发布