冒泡排序

基本思想:两个数比较大小,较大的向下沉,较小的向上冒出来
过程:

  • 比较相邻的两个数,如果第二个小,就交换位置
  • 从后向前两两比较,一直到比较最前两个数据。最终最小数被交换到起始位置,这样第一个数就排好了

image.png
时间复杂度为:O(n^2)

  1. public static void BubbleSort1(int [] arr){
  2. int temp;//临时变量
  3. boolean flag;//是否交换的标志
  4. for(int i=0; i<arr.length-1; i++){ //表示趟数,一共 arr.length-1 次
  5. // 每次遍历标志位都要先置为false,才能判断后面的元素是否发生了交换
  6. flag = false;
  7. for(int j=arr.length-1; j>i; j--){ //选出该趟排序的最大值往后移动
  8. if(arr[j] < arr[j-1]){
  9. temp = arr[j];
  10. arr[j] = arr[j-1];
  11. arr[j-1] = temp;
  12. flag = true; //只要有发生了交换,flag就置为true
  13. }
  14. }
  15. // 判断标志位是否为false,如果为false,说明后面的元素已经有序,就直接return
  16. if(!flag) break;
  17. }
  18. }

选择排序

基本思想:在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;
第二次遍历n-2个数,找到最小的数值与第二个元素交换;
。。。
第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。
image.png
时间复杂度:O(n^2)

  1. public static void select_sort(int array[],int lenth){
  2. for(int i=0;i<lenth-1;i++){
  3. int minIndex = i;
  4. for(int j=i+1;j<lenth;j++){
  5. if(array[j]<array[minIndex]){
  6. minIndex = j;
  7. }
  8. }
  9. if(minIndex != i){
  10. int temp = array[i];
  11. array[i] = array[minIndex];
  12. array[minIndex] = temp;
  13. }
  14. }
  15. }