一、冒泡排序
特点: 1、比较相邻的两个元素,大的向右排 2、一轮之后,最大的在最右边 3、n个元素:n-1轮完成排序 4、特别适合小数据的排序,由于算法复杂度较高,在数据量大的时候不适合使用
//已经创建了一个数组arr[],且数组中储存了值
//从小到大排列
for(int i=arr.length-1;j>0;j--){ //控制循环的次数
for(int j=0;j<i;j++){ //控制每次循环的次数
if(arr[i]>arr[i+1]){ //比较相邻的两组数据,如果前面的数比后面的数大,实现交换位置
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
二、选择排序
特点: 1、每个元素和第一个元素比,最小的放在最左边 2、一轮之后,最小的始终在最左边
//已经创建了一个数组arr[],且数组中储存了值
//从小到大排列
for(int i=0;i<arr.length-1;i++){ //控制总循环的次数
for(int j=i+1;j<arr.length;j++){ //控制比较的次数
if(arr[i]>arr[j]){
int x=arr[i];
arr[i]=arr[j];
arr[j]=x;
}
}
}
三、插入排序
理解思路: 1、把数组分两半,左边是一个数组,右边一个数组(遇到分两半的时候,一般把左边分一个,右边分多个,方便左边不用排) 2、从右半数组中,一个按一个的顺序取出元素,放在左边的元素中间合适的位置,取出的元素要和左边的进行比较
for(int i=1;i<arr.length;i++){ /*i从下标1开始,即第二个开始,将需要一个一个取出来,取
出一个i要和所有的j比较*/
int a=arr[i]; //j+1就是i 如果此处不先把数取出来 值会被覆盖。
for(int j=i-1;j>=0;j--){
if(a<arr[j]){ //只是a比j小的时候 j需要换位置
arr[j+1]=arr[j]; //向右移动一位
arr[j]=a;
}
}
}