众所周知,排序算法有很多种,常用的有冒泡,选择,插入,堆排,快排等等,

咱们就废话少说,直奔主题。。。

一、冒泡排序

思想:

1、比较相邻元素,如果最后一个元素比倒数第二个小,就交换他们,循环依次从第一个到最后个,都同样的操作,从最后最小的元素置换到最前,最后一个元素为最大元素,

代码:

//关键代码#include 
#include
#define LEN 8using namespace std;int main(){void output(int* p);srand(time(NULL));int arr[LEN];for(int i=0;i
i;j--) { if(arr[j]

二、选择排序[不稳定]

思想;

1、首先你需要找到最小元素的位置;

2、将最小元素的与当前元素替换。

优化:替换时,判断当前元素的位置和最小元素的位置如果一样就没必要替换。

遍历数组时,外层只需要遍历到LEN-1;因为内层是从当前元素位置开始向后的遍历。

代码

#include 
#include
using namespace std;#define LEN 8int main(){ void output(int *p); int arr[LEN]={0}; srand(time(NULL)); for(int i=0;i
arr[j]) { key=j; } } //交换 if(k!=key) { arr[key]^=arr[k]; arr[k]^=arr[key]; arr[key]^=arr[k]; } } output(&arr[0]); return 0;}void output(int *p){ for(int i=0;i

插入排序:

思想:

1、找到一个基准点,基本数 存贮起来。

2、比较其前面的元素与他的大小、如果比他大,就将前面的元素后移到该元素的位置,当前元素位置自减【前移】,再比较其前面的元素与之的大小,如果比他大就后移。。。如此循环。直到不比他大或者已经到了第一个元素的位置【数组已经到到0位置时】,将存贮起来的值赋给当前位置。

代码

#include 
using namespace std;#define LEN 8void output(int *p){ for(int i=0;i
=0&&arr[j]>key;j--) { arr[j+1]=arr[j]; } arr[j+1]=key; } output(arr); return 0;}