前言
《一句话算法系列》是将常用排序算法一句话来概括,并且通过反复揣摩这句话,达到真正理论和实际编码高度契合。一个字就代表很多代码,就像玄幻小说里面的言出法随的境界。也就是说,你再也不用记代码了,只要记住一句话,脑海中随即可以快速编码,达到真正理解的目的。
选择排序法
每次从剩下的数据中找最小的数值放在前面。
找,这个字眼,看到‘找’脑海就要里面想到for循环和swap数据比较。既然牵涉到比较,那么就要至少两层for循环,一层for循环取出A,另外一层for循环取出B,A和B比较。最小的数值放在前面,那么第一个默认的最小的值是谁呢,从小到大排序,当然是第一个默认最小值,然后和后面的值进行比较。
//交换数据,肯定要传入整个数组,这个前面的下标i ,最小的数值的下标minIndex。有点点编程基础的人都可以写出来。
//这种编程思想也是告诉我们,功能总是能实现的,先慢慢来,实现容易实现的部分,那么复杂的东西,最后也就不复杂了。
//swap 交换
void swap(int[] arr,int i,int minIndex){
//临时变量val接收,此时前面arr[i]使命结束,可以将一轮排序后最小的值放在所谓的前面int val = arr[i];
arr[i] = arr[minIndex];
//不改变数组的值 那么还要将前面的那个值放回数组,放哪里呢,即放到最小的那个值所在的位置,即达到所谓交换
arr[minIndex] = val;
}
//sort 排序的意思 照顾英文不好的同学……
void sort(int[] arr){
int length = arr.length;for(int i = 0;i < length; i++){
//先假定第一个是最小的 假设法
int minIndex = i;
//拿第一个和 剩下的数据比找出最小的 依次++
for(int j=i+1;j<length;j++){
//是大于还是小于呢,因为是找出最小值,从小到大排序, 后面要前面更小才有资格排到前面
if(arr[j]<arr[minIndex]){//其实我认为下面这句代码才是整个核心,即不断更换minIndex的值,然后if里面arr[minIndex]又是新的值,有点递归的思想。
minIndex=j;
}}
假设八个数,第一轮就找出八个数最小的,第二轮就找出剩下的数据中最小的,以此轮推.每轮找出剩下数据最小的
//上面只是记录最小值的索引 找出来后和最外层循环的i所占据位置交换位置
swap(arr,i,minIndex);
}
}