在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1 static void Main(string[] args) 2 { 3 4 Console.WriteLine("************快速排序*****************"); 5 int[] list = new int[] { 4, 7, 6, 5, 3, 2, 8, 1 }; 6 QuickSort qs = new QuickSort(); 7 qs.quikSort(list, 0, list.Length - 1); 8 for (int i = 0; i < list.Length; i++) 9 { 10 Console.WriteLine("第{0}位是{1}", i + 1, list[i]); 11 } 12 // Console.WriteLine(list); 13 14 Console.ReadKey(); 15 } 68 69 70 //递归快速排序法 71 public class QuickSort 72 { 73 //快速排序 74 public void quikSort(int[] arr, int startIndex, int endIndex) 75 { 76 //递归结束条件 startIndex>endIndex 77 if (startIndex >= endIndex) 78 { 79 return; 80 } 81 82 //得到基准元素的位置 83 int pivotIndex = partiton(arr, startIndex, endIndex); 84 85 //根据基准元素,分成两部分递归排序 86 quikSort(arr, startIndex, pivotIndex - 1); 87 quikSort(arr, pivotIndex + 1, endIndex); 88 } 89 //挖坑法 private static int partiton1(int[] arr, int startIndex, int endIndex) { // 4, 7, 6, 5, 3, 2, 8, 1 //获取第一个位置的元素作为基准元素 int pivot = arr[startIndex]; //4 int left =startIndex; //0 int right = endIndex; //7 //坑的位置,初始等于pivot的位置 int index = startIndex; //0 //大循环在左右指针重合或交错时结束 while (right >= left) { //right指针从右向左进行比较 while (right >= left) { int a = arr[right]; if (arr[right] < pivot) { int s = arr[right]; int t = arr[left]; arr[left] = arr[right]; index = right; left++; break; } right--; } //left指针从左向右进行比较 while (right > left) { if (arr[left] >= pivot) { int a = arr[right]; int b = arr[left]; arr[right] = arr[left]; index = left; right--; break; } left++; } } arr[index] = pivot; return index; }
128 }
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论