众所周知,排序算法有很多种,常用的有冒泡,选择,插入,堆排,快排等等,
咱们就废话少说,直奔主题。。。
一、冒泡排序
思想:
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位置时】,将存贮起来的值赋给当前位置。
代码
:
#includeusing 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;}