排序算法总结
2020-04-29 11:10 lulu有为 阅读(117) 评论(0) 收藏 举报1.冒泡排序(升序排序)
临近的两个元素两两交换,第一轮排序将最大的数放到最后一位,第二轮排序将第二大的数放到倒数第二位。例如对{2,5,3,4,1}这个数列进行排序
public BubbleSort(int[] arr)
{
int temp = 0;
for(int i = 0;i < arr.Length-1; i++)
{
// 提前退出冒泡循环的标志位 boolean flag = false;
for(int j=0;j<arr.length-i-1;j++)
{
if(arr[j] > arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = arr[j];
flag = true; // 表示有数据交换
}
}
if (!flag) break; // 没有数据交换,提前退出
}
2.选择排序
public SelectSort(int[] arr)
{
for(int i=0;i<arr.Length;i++)
{
for(int j=i+1; j<arr.Lenth;j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}
2.1选择排序的优化算法
1 //选择排序
2 public class SelectionSort {
3 public static void main(String[] args) {
4 int[] arr={1,3,2,45,65,33,12};
5 System.out.println("交换之前:");
6 for(int num:arr){
7 System.out.print(num+" ");
8 }
9 //选择排序的优化
10 for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序
11 int k = i;
12 for(int j = k + 1; j < arr.length; j++){// 选最小的记录
13 if(arr[j] < arr[k]){
14 k = j; //记下目前找到的最小值所在的位置
15 }
16 }
17 //在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换
18 if(i != k){ //交换a[i]和a[k]
19 int temp = arr[i];
20 arr[i] = arr[k];
21 arr[k] = temp;
22 }
23 }
24 System.out.println();
25 System.out.println("交换后:");
26 for(int num:arr){
27 System.out.print(num+" ");
28 }
29 }
30 }
浙公网安备 33010602011771号