《java数据结构与算法》系列之“简单排序"-冒泡,选择,插入
好几天又没写,因为这几天很闲,平时忙的时候自己再累都不会睡着,但是呢这没事了,照理说应该是不瞌睡了,结果还睡着了。
所以说,人很贱。也验证了一句话,没有目标的人其实最无聊。人一定要有自己的工作,这工作部限于朝九晚五的工作,像家庭主妇也可以是工作,总之要有目标,如果没有,我想人会发疯的。当然休息的时候另外。废话到此。
简单排序包括:冒泡,选择,插入三种。
1:冒泡排序:
原理:从上到下,对每一对相邻的数进行比较,直到最大的数或最小的数字飘到最上面。
1 int a[] = {1,26,6,12,8,15} ;//初始数组 2 int temp ; 3 for(int i =0 ; i < a.length -1 ; i ++ ) 4 { 5 for(int j=0 ; j < a.length -1 -i ; j++ ) 6 { 7 //每次一轮缩掉一个比较的数,即轮数是这样的:外层循环总5轮(数组的个数-1) 8 1和2,2和3,3和4,4和5,5和6 第一轮 9 1和2,2和3,3和4,4和5 第二轮 10 1和2,2和3,3和4 第三轮 11 1和2,2和3 第四轮 12 1和2 第五轮 13 if(a[j]>a[j+1])//从大到小排列 14 { temp = a[j]; 15 a[j]=a[j+1]; 16 a[j+1]=temp; 17 } 18 } 19 }
2:选择排序:
原理:每一轮选择一个最小或大的书放在数列的最开头,然后对剩下的数依次取一个最大或小的数放在之前那个数列的后面,依次类推。
1 int a[] = {1,26,6,12,8,15} ;//初始数组 2 int temp ; 3 for(int i =0 ; i < a.length -1 ; i ++ ) 4 { 5 for(int j=i+1 ; j < a.length ; j++ ) 6 { 7 //每次一轮去掉一个最小或大的数,即轮数是这样的:外层循环总5轮(数组的个数-1) 8 1和2,1和3,1和4,1和5,1和6 第一轮 9 2和3,2和4,2和5,2和6 第二轮 去掉1 10 3和4,3和5,3和6 第三轮 去掉2 11 4和5,4和6 第四轮 去掉3 12 5和6 第五轮 去掉4 13 if(a[j]>a[j+1])//从大到小排列 14 { temp = a[j]; 15 a[j]=a[j+1]; 16 a[j+1]=temp; 17 } 18 } 19 }
3:插入排序:
原理:从第一个数字开始,下一个数字依次与前面已经排好的所有数字依次比较并排序即插入到前面已经排好序的里面,第一个数字假定是已经排好了的数字。
1 int a[] = {1,26,6,12,8,15} ;//初始数组 2 int temp ; 3 ////算法:2与1比较,排好1和2 4 // 3与2比较,3与1比较 排好1,2,3 5 // 4与3比较,4与2比较,4月1比较 拍好1,2,3,4 6 // 5和4,5和3,5和2,5和1 拍好1,2,3,4,5 7 // 6和5,6和4,6和3,6和2,6和1 完成排序。 拍好1,2,3,4,5,6 8 for(int i=1; i <a.length ; i++){ i控制2,3,4,5,6 9 for( int j =1; j < i+1 ; j++){ j控制1,1和2,1和2和3,1和2和3和4,1和2和3和4和5 10 if(a[i]>a[j-1]){ 11 temp=a[i]; 12 a[i]=a[j-1]; 13 a[j-1]=temp; 14 } 15 } 16 }