数组的排序算法
选择排序
- 原理:将数组中的第一个位置上的数据和数组后面每一个数据进行比较,如果符合条件则进行交换.每一轮都会有一个最大值或者最小值在数组的第一位.经过n-1轮完成排序.
采用i描述第一个数据的位置:[0,length-1)
采用j描述第一个数据后面的位置:[i+1,length-1]
如果采用升序排列,伪代码:
if(arr[i]>arr[j]){ 交换数据}
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[j]<arr[i]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
冒泡排序
- 原理:比较数组中两个相邻位置的数据,如果符合条件则交换,经过一轮比较会有一个最大值或者最小值在最后面.经过n-1轮完成排序.
采用i描述比较的次数:[0,arr.length-1)
采用j描述两个相邻的位置:[0,arr.length-1-i)
采用升序排列,伪代码:
if(arr[j]>arr[j+1]){//交换}
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
插入排序
- 原理:将数组分成两个部分,必须确保第一部分是有序的.通常情况将数组的第一个位置上的数据设置为第一部分.将第二部分的第一个数据和第一部分的每个位置的上的数据进行比较,直到找到该数据在第一部分的位置时才进行交换.
- 使用i描述第二部分的第一个位置:[1,arr.length-1]
- 使用j描述第一部分的位置:[0,i-1]
注意:插入排序必须找到数据在第一部分的位置时才会进行交换.
for(int i=1;i<arr.length;i++){
int temp=arr[i];
int j;
for(j=i-1;j>=0;j-- ){
if(temp<arr[j]){
arr[j+1]=arr[j];
continue;
}else{
break;
}
}
arr[j+1]=temp;
}