3089589

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

public static void quickSort(int[] sort, int start, int end) {
// 设置关键数据key为要排序数组的第一个元素,  
// 即第一趟排序后,key右边的数全部比key大,key左边的数全部比key小  
        int key = sort[start];  
// 设置数组左边的索引,往右移动判断比key大的数  
        int i = start;  
// 设置数组右边的索引,往左移动判断比key小的数  
        int j = end;  
// 如果左边索引比右边索引小,则还有数据没有排序  
        
while (i < j) {  
while (sort[j] > key && j > start) {  
                j--;  
            }

while (sort[i] < key && i < end) {  
                i++;
            }  
if (i < j) {  
int temp = sort[i];  
                sort[i] = sort[j];  
                sort[j] = temp;  
            }
        }  
// 如果左边索引比右边索引要大,说明第一次排序完成,将sort[j]与key对换,  
// 即保持了key左边的数比key小,key右边的数比key大  
        if (i > j) {  
int temp = sort[j];  
            sort[j] = sort[start];  
            sort[start] = temp;  
        }  
//递归调用  
        if (j > start) {  
            quickSort(sort, start, j - 1);  
        } 
if (j < end) {  
            quickSort(sort, j + 1, end);  
        }
    }
posted on 2013-03-26 09:24  liangge0218  阅读(98)  评论(0)    收藏  举报