冒泡排序之面试官的常问题
电脑版发表于:2018/12/19 19:09
本人面试过的公司有3家公司的面试官都问了同一个问题
面试官:会写排序吗?
我:会啊!
面试官:来一个冒泡排序吧。(随手给了你一张纸,一支笔)
那么问题来了: 如何让面试官对你的冒泡排序感兴趣?
首先:冒泡排序不能单一(只写一种)
其次 :不能直接写出高难度的排序(太浪费自己的时间了)
最后:在你写的最简单的排序中,向面试官变换一下你的排序方式
本人没事时总结出的几种(不是全部)排序方式
一.最简单的冒牌直排(直接排序)
int[] num = { 1, 4, 3, 10, 5, 8, 7, 6 }; //首先你得有一个可以排序的数组 for (int i = 0; i < num.Length - 1; i++) //循环所有的元素 { for (int j = 0; j < num.Length - 1; j++) { if (num[j] > num[j + 1]) //开始比较元素大小 这里判断是看你从小到大 还是从大到小 { int temp = num[j + 1]; //将小的一个暂存起来 num[j + 1] = num[j]; num[j] = temp; //把小的赋值给前一个元素 } } }
这是最基本的排序 但是 这是最基础的实现排序 下面改造一下
int[] num = { 1, 4, 3, 10, 5, 8, 7, 6 }; //你还是得有一个可以排序的数组 for (int i = 0; i < num.Length - 1; i++) //还是一样循环所有的元素 { for (int j = 0; j < num.Length - 1 - i; j++) //注意此处的 -i 这是过滤调已经排过的元素,可以提高循环效率 { if (num[j] > num[j + 1]) { int temp = num[j + 1]; num[j + 1] = num[j]; num[j] = temp; } } }
这是最基本的for 循环排序了
二.来一个while的排序
看代码->
int[] num = { 1, 4, 3, 10, 5, 8, 7, 6 }; //还是同一个数组 int i = 0; int j = 0; while (i < num.Length - 1) { while (j < num.Length - 1) { if (num[j] > num[j + 1]) { int temp = num[j + 1]; num[j + 1] = num[j]; num[j] = temp; } j++; } i++; }
这是通过最简单的for循环来的while循环排序 原理是一个样子的,没有技术含量
那么问题又来了:现在这个排序一样是没有过率掉已经排过的元素,怎么去过滤?
我提供其中一种(剩下的可以自己脑补一下)
int[] num = { 1, 4, 3, 10, 5, 8, 7, 6 }; int i = 0; int j = 0; bool flag = true; //添加一个开关 while (i < num.Length - 1 && flag) { flag = false; while (j < num.Length - 1) { flag = true; if (num[j] > num[j + 1]) { int temp = num[j + 1]; num[j + 1] = num[j]; num[j] = temp; } j++; } i++; }
这里使用的是for 循环 while循环排序
那么这点排序是微乎其微的,所有就有了变换形的排序
三.先来一个for循环的逆向排序玩玩
直接上代码->一个反向的从大到小的排序
int[] num = { 1, 4, 3, 10, 5, 8, 7, 6 }; for (int i = num.Length - 1; i > 0; i--) { for (int j = 0; j < i; j++) { if (num[j] < num[j + 1]) { int temp = num[j]; num[j] = num[j+1]; num[j+1] = temp; } } }
其余的自己脑补
四.再来一个for和 while 的嵌套
int[] num = { 1, 4, 3, 10, 5, 8, 7, 6 }; int i = 0; bool falg = true; while (i < num.Length - 1 && falg) { falg = false; i++; for (int j = 0; j < num.Length - i; j++) { falg = true; if (num[j] > num[j + 1]) { int temp = num[j + 1]; num[j + 1] = num[j]; num[j] = temp; } } }
其余的嵌套自己脑补(还有很多的方式)