排序算法总结
2020-04-29 11:10 lulu有为 阅读(114) 评论(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 }