c#排序
插入排序:
1 class Class1 2 { 3 /*先将第一个记录视为一个有序序列,然后依次将后面的记录插入到这个有序序列中来。 4 * 每次要插入的记录时,须从后往前依次比较有序序列中的记录,直到找到在有序序列中的位置, 5 * 记录下该位置,该位置开始的每个记录都后移一位,然后将插入记录插入该位置。这样每插入一个记录进去, 6 * 有序序列长度加1,剩余记录减1,直到所有记录都插入到有序序列中,排序完成。*/ 7 public void InsertionSort()///插入排序法 8 { 9 int[] arr = new int[]{30,45,54,13,49,45}; 10 int inner, temp; 11 for (int outer = 1; outer <= arr.Length-1; outer++)//每当一次内层循环,有序序列加1 12 { 13 temp = arr[outer];//temp代表要插入的数 14 inner = outer; 15 while (inner > 0 && arr[inner - 1] >= temp)//inner-1代表有序序列的最大值索引,每次循环减1 16 { 17 arr[inner] = arr[inner - 1];//有序记录后移 18 inner--; 19 } 20 arr[inner] = temp; 21 } 22 foreach(int i in arr) 23 { 24 Console.WriteLine(i); 25 } 26 Console.ReadKey(); 27 } 28 }
基本冒泡排序法:
1 public void BubbleSort()///基本冒泡排序法 2 { 3 int temp; 4 for (int outer = upper; outer > 0; outer--)//因为最后只有一个数的时候,就是最小的,不用再排,所以outer>0 5 { 6 for (int inner = 0; inner < outer; inner++)//内层遍历每次遍历中都把最大的数排到了最后 7 { 8 if (arr[inner] > arr[inner + 1]) //从第一个数开始遍历,前面一个比后面一个大进行交换;temp是一个局部变量,用来存放交换过程中的值 9 { 10 temp = arr[inner]; 11 arr[inner] = arr[inner + 1]; 12 arr[inner + 1] = temp; 13 } 14 } 15 } 16 }
改进冒泡排序:
/*改进冒泡比基本冒泡多了一个i=0的判断,应该是多了一种特殊情况的判断若记录序列的初始状态为"正序", * 则冒泡排序过程只需进行一趟排序,在排序过程中只需进行n-1次比较,没有进入if判断和交换 * 且不移动记录;反之,若记录序列的初始状态为"逆序",则需进行n(n-1)/2次比较和记录移动*/ public void BubbleSort()///改进冒泡排序法 { int temp, i; for (int outer = upper; outer > 0; outer--) { i = 0; for (int inner = 0; inner < outer; inner++) { if (arr[inner] > arr[inner + 1]) { temp = arr[inner]; arr[inner] = arr[inner + 1]; arr[inner + 1] = temp; i++; } } if (i == 0) break; } }
选择排序法:
1 public void SelectionSort()///选择排序法 2 { 3 int min, temp; 4 for (int outer = 0; outer <= upper; outer++) 5 { 6 min = outer; //min代表数组未排序部分最前面的索引 7 for (int inner = outer + 1; inner <= upper; inner++)//再一次遍历中会找到数组最小数的索引 8 { 9 if (arr[inner] < arr[min]) //如果数组的后一个数小于被比较的数 10 min = inner; //就将后一个数的索引赋值给min 11 } 12 temp = arr[outer]; //outer代表了在一次遍历中被比较数的索引,min代表了在一次遍历中最小数的索引, 13 arr[outer] = arr[min]; //把这两个数交换 14 arr[min] = temp; 15 } 16 }
落霞与孤鹜齐飞,秋水共长天一色。