本文主要介绍三种分类方法:交换排序,冒泡排序,选择排序。
1、交换排序
主要思想:将第一小的放到第一个位置,将第二小的放到第二个位置.....
操作:两层循环,第一层循环变量i从0到len-2,第二层循环变量j从i+1到len-1;循环体:当num[i]>num[j]时交换二者的位置
代码:
1 for (int i = 0; i < nums.Length - 1; i++) 2 { 3 //在 i-(nums.Length-1) 范围内,将该范围内最小的数字提到i 4 for (int j = i + 1; j < nums.Length; j++) 5 { 6 if (nums[i] > nums[j]) 7 { 8 //交换 9 int temp = nums[i]; 10 nums[i] = nums[j]; 11 nums[j] = temp; 12 } 13 } 14 }
2、冒泡排序
主要思想:在0-i的范围内将该范围内最大的沉到位置i
操作:两层循环。第一层循环变量i从len-1到1,第二层循环变量j从0到i-1;循环体:当num[j]>num[j+1],交换二者的位置
代码:
1 for (int i = nums.Length - 1; i > 0; i--) 2 { 3 //在 0-i 范围内,将该范围内最大的数字沉到i 4 for (int j = 0; j < i; j++) 5 { 6 if (nums[j] > nums[j+1]) 7 { 8 //交换 9 int temp = nums[j]; 10 nums[j] = nums[j+1]; 11 nums[j+1] = temp; 12 } 13 } 14 }
3、选择排序
主要思想:找到最大元素的下标,与当前元素交换
操作:两层循环。第一层循环变量i从0到len-2,第二层循环变量j从i+1到len-1,循环体:比较num[i]和num[j]的大小,单独用一个变量index保存大的那个数的下标。最后将index指向的变量与num[i]交换
代码:
1 for (int i = 0; i < nums.Length - 1; i++) 2 { 3 //在 i-(nums.Length-1) 范围内,将该范围内最小的数字提到i 4 //1. 首先找到 i - (nums.Length-1) 范围内的最小数所在的下标 5 int index = i; //先假设最小数的下标是i 6 for (int j = i + 1; j < nums.Length; j++) 7 { 8 if (nums[j] < nums[index]) 9 { 10 //发现了更小的数 11 index = j;//记录下标 12 } 13 } 14 //2. 然后将nums[i]和nums[index]的值交换 15 int temp = nums[i]; 16 nums[i] = nums[index]; 17 nums[index] = temp; 18 }