关于几种经典的排序算法,选择排序还有冒泡排序都很好理解,但是这两种排序效率不高,而插入排序在一般只有数据量小的时候具有高效率。快速排序是相对高效的排序算法,我知道思想,但是不知道具体怎么实现,研究了好半天后终于整出来了,求大神们指正
- /*关于快速排序:
- 步骤:
- 1、选择一个标准元素
- 2、使用该标准元素分割数组,使得比该元素小的元素在它的左边,比它大的在右边。
- 3、根据标准元素最后确定的位置,把数组分成三部分,左边的,右边的,标准元素自己,
- 然后再对左边的和右边的分别递归调用快速排序算法即可。
- */
- class QuickSort
- {
- public static void main(String[] args)
- {
- int [] arr = new int [] {43,8,12,4,98,43,25,65,44,26,33,2,9,38,66,17};
- Sort(arr,0,arr.length-1);
- sopArray(arr);
- }
- public static void Sort(int [] arr, int mid ,int end)
- {
- int x= mid,y= end; //记录最开始接收的数组的头和尾
- if (mid == end)
- return;
- int start = mid+1;//从start开始逐个与标准值比较(我取的标准值为这一段的最低位)
- while (start<=end)
- {
- //若arr[start]<arr[min],则把小于标准值的移到左边,mid,start自增
- if(arr[start]<arr[mid])
- {
- trans(arr,start,mid);//换位
- mid++;
- start++;
- }
- //否则则把大于等于标准值的值移到尾端,end自减
- else
- {
- trans(arr,start,end);
- end--;
- }
- //以刚开始接收的数组的头作为头,以mid-1作为尾,对小于arr[mid]的这段数组进行快速排序
- Sort(arr,x,mid-1);
- //以mid+1作为头,以刚开始接受的数组的尾作为尾,对大于arr[mid]的这段数组进行快速排序
- Sort(arr,mid+1,y);
- }
- }
- public static void sopArray(int [] arr)//打印数组
- {
- for (int i=0 ;i<arr.length ;i++ )
- {
- System.out.print(arr[i]+" ");
- }
- System.out.println();
- }
- public static void trans(int[] arr,int x, int y)//换位
- {
- int temp = arr[x];
- arr[x] = arr[y];
- arr[y] = temp;
- }
- }
复制代码
|
|