4种排序算法
1.冒泡排序
冒泡排序算法的运作如下:(从后往前)
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 [1]
public static void bubbling() {
int[] arr2 = {8,13,5,6,11,2,1};
for(int i=0;i<arr2.length;i++) {
for(int j=0;j<arr2.length-1-i;j++) {
if(arr2[j]>arr2[j+1]) {
int temp = arr2[j];
arr2[j]=arr2[j+1];
arr2[j+1]= temp;
}
}
}
System.out.println(Arrays.toString(arr2));
}
2.二分查找
二分查找算法也称为折半搜索、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。请注意这种算法是建立在有序数组基础上的。
①找出位于数组中间的值,并存放在一个变量中(为了下面的说明,变量暂时命名为temp);
②需要找到的key和temp进行比较;
③如果key值大于temp,则把数组中间位置作为下一次计算的起点;重复① ②。
④如果key值小于temp,则把数组中间位置作为下一次计算的终点;重复① ② ③。
⑤如果key值等于temp,则返回数组下标,完成查找。
public class work03 {
public static void main(String[] args) {
int[] nums= {5,9,1,4,23,7};
int i = binSearch(nums,1);
System.out.println(i);
}
public static int binSearch(int srcArray[], int key) {
int mid = srcArray.length / 2;
if (key == srcArray[mid]) {
return mid;
}
int start = 0;
int end = srcArray.length - 1;
while (start <= end) {
mid = (end - start) / 2 + start;
if (key < srcArray[mid]) {
end = mid - 1;
} else if (key > srcArray[mid]) {
start = mid + 1;
} else {
return mid;
}
}
return -1;
}
}
3.快速排序
//快速
public static void fast(int [] arr2,int start,int end) {
int[] arr2 = {8,13,5,6,11,2,1};
System.out.println("快速排序"+Arrays.toString(arr2));
}
public static void sort(int a[],int start,int end) {
int i,j,index;
if(start>end) {
return;
}
i=start;
j=end;
index=a[i]; // 基准值
//从表中间往两边扫描
while(i<j) {
while(i<j && a[j]>=index) {
j--;
}
if(i<j) {
a[i]=a[j]; // 用比基准小的记录替换低位记录
i++;
}
while(i<j && a[i]<index) {
i++;
}
if(i<j) {
a[j]=a[i];// 用比基准小的记录替换低位记录
j--;
}
System.out.println(Arrays.toString(a));
}
System.out.println("i"+i);
a[i]=index;//基准值替换回a[i]
sort(a, start, i - 1); // 对低子表进行递归排序
sort(a, i + 1, end); // 对高子表进行递归排序
}
4.选择排序
public static void xuanze(int[] arr2) {
for(int i=0;i<arr2.length-1;i++) {
int k = i;
for(int j=k+1;j<arr2.length;j++) {
if(arr2[k]>arr2[j]) {
k=j;
}
}
if(i!=k) {
int temp = arr2[i];
arr2[i]=arr2[k];
arr2[k]=temp;
}
}