下面的99%的代码都是手动敲出来的,参考了诸多资料,已经经过测试,可以放心食用。
1.冒泡排序
基本思想
冒泡排序基本思想是依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
在进行第一轮上面的从左到右的比较时,则会把一个最小或者最大的元素(取决于你想要的排列方式)"冒泡"到最右边的位置,第二轮则是冒泡第二大或第二小的数到最右边,因此我们总共只需要进行n-1轮即可,最后一个数的位置也被固定了(其余n-1个数都比他大且都在其右边)。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
动画:
![87225ae87eb0d2a300dec3a5f3e1b364.gif](https://img-blog.csdnimg.cn/img_convert/87225ae87eb0d2a300dec3a5f3e1b364.gif)
实现
//void bubbleSort(){ //C实现 int arr[] = {5, 9, 3, 8, 6}; int len = sizeof(arr)/sizeof(arr[0]); int temp; for (int i = 0; i < len - 1; i++) //从小到大 { // 外循环为排序趟数,len个数进行len-1趟 for (int j = 0; j < len - 1 - i; j++) { // 内循环为每趟比较的次数,第i趟比较len-i次,因为第一次已经将最大的元素冒泡到最后一个位置了 if (arr[j] > arr[j + 1]) { //相邻元素比较,逆序则将交换位置 temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } //打印数组 for (int i = 0; i < len; i++) printf("%d", arr[i]);}
2.选择排序
基本思想
第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
动画:
![333e5a0b9ab64de77ec831ac2fe7c099.gif](https://img-blog.csdnimg.cn/img_convert/333e5a0b9ab64de77ec831ac2fe7c099.gif)
实现
//int arr[] = {100, 92, 5, 9, 3, 8, 23, 17, 50, 6}; int len = sizeof(arr)/sizeof(arr[0]); int index = 0; //待会用来存储未排序区最小元素的位置索引 for (int i = 0; i < len; i++) //从小到大 { index = i; for (int j = i + 1; j < len; j++) //用i之后的每一个元素去与i元素比较大小,若小于arr[i]则更新最小元素索引 { if (arr[j] < arr[index]) index = j; } //将i与index的元素调换位置 //注意:此处不可将调换位置的函数写进第二层for循环即for(int j=i+1)中,因为交换后i与min指向的对象会交换,此后循环就可能出现仅仅小于arr[i](此时已经换到了min位置)但不小于arr[min](这时在i位置上)的元素也与初始位置上进行交换的情况,具体情况可以试验! if (i != index) //判断是否需要调换,将最小元素位置换至第一个未排序的位置 { int temp = arr[i]; arr[i] = arr[index]; arr[index] = temp; } } //打印数组 for (int i = 0; i < len; i++) printf("%d", arr[i]);}
3.插入排序
基本思想
插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而形成一个新的、记录数增1的有序表。
一般将第一个元素看做最小的有序组,然后用第二个元素插入到第一个元素组成的有序表中(其实就是个简单的比较大小),然后将第三个元素插入到前两个元素组成的有序表中,形成一个三个元素的有序表,以此类推,最终获得一个包含全部元素的有序表
![023b45ca49ac1dad3c55464a5eeb43e8.gif](https://img-blog.csdnimg.cn/img_convert/023b45ca49ac1dad3c55464a5eeb43e8.gif)
实现
//void insertionSort()