快速排序是先将大的值和小的值分成2组再进行比较整合输出最后排序结果;
var arry = new int[] { 5, 45, 63, 8, 52, 99, 34 }; //建立数组 QuickSort(arry, 0, arry.Length - 1); foreach (var t in arry) { Response.Write(t+" "); //输出排序后的结果 }
/// <summary> /// 快速排序算法 /// </summary> /// <param name="data">排序数组</param> /// <param name="leftpos">下限</param> /// <param name="rightpos">上限</param> static void QuickSort(IList<int> data, int leftpos, int rightpos) { while (true) { var middle = data[(rightpos + leftpos) / 2]; //中间值 var i = leftpos; //移动上下标 var j = rightpos; do //循环知道分割为2个序列 { while (data[i] < middle && i < rightpos) //扫描中值左边的序列 i++; while (data[j] > middle && j > leftpos) //扫描中值右边的序列 j--; if (i > j) continue; var temp = data[i]; //知道可交互的值交换数据 data[i] = data[j]; data[j] = temp; i++; j--; } while (i <= j); { if (j > leftpos) //递归对比分割点元素都小的那个序列进行快速排序 QuickSort(data, leftpos, j); if (i < rightpos) { //递归对比分割点元素都大的那个歌序列进行快速排序 QuickSort(data,i,rightpos); } } break; } }