冒泡,插入,选择,快速排序
/*
* @Issue: 数组排序:从键盘读入多个整数,要求对这些整数实现从小到大或从大到小排序,
屏幕上输出排序结果。冒泡、选择、插入,快速排序三种排序算法都可以
* @Author: 一届书生
* @LastEditTime: 2020-03-18 15:13:41
*/
#include <iostream>
#include <stdio.h>
using namespace std;
#define num 10
int a[100]; //待排序数组
// 冒泡排序 从小到大
void bubble(int *p, int len)
{
int t = 0;
for (int i = 0; i < len - 1; i++)
{
for (int j = i + 1; j < len; j++)
{
if (*(p + i) > *(p + j))
{ //若想从大到小 改成<即可
swap(*(p + i), *(p + j));
}
}
}
}
// 插入排序
void insert(int *p, int len)
{
int i, j, key;
for (i = 1; i < len; i++)
{ //从第二个数开始判断
key = *(p + i); //取一下第二个数
j = i - 1; //遍历第i个数之前的数
while (j >= 0 && *(p + j) > key)
{
*(p + j + 1) = *(p + j);
j--;
}
*(p + j + 1) = key;
}
}
// 选择排序
void select(int *p, int len)
{
int minindex, temp;
for (int i = 0; i < len - 1; i++)
{
minindex = i;
for (int j = i + 1; j < len; j++)
{
if (*(p + j) < *(p + minindex))
minindex = j; //遍历余下的数组 找一个最小的,与第i个位置的数交换
}
swap(*(p + i), *(p + minindex));
}
}
// 快速排序
void quickSort(int t[], int left, int right)
{
if (left >= right)
return;
// display(t, 10); // 快排的过程展示
int standard = t[left]; //以最左边界的那个数 作为基准数
int i = left, j = right;
while (i < j)
{
while (t[j] >= standard && j > i)
j--;
while (t[i] <= standard && i < j)
i++;
swap(t[i], t[j]);
}
swap(t[left], t[i]);
quickSort(t, left, i - 1);
quickSort(t, i + 1, right);
}
int main()
{
for (int i = 0; i < num; i++)
{
cin >> a[i];
}
// bubble(a,num); //冒泡排序
// insert(a,num); //插入排序
// select(a,num); //选择排序
quickSort(a, 0, num - 1); //快速排序
for (int i = 0; i < num; i++)
{
cout << a[i] << " ";
}
return 0;
}