快速排序代码
public class Quick {
public static void main(String[] args) {
int [] nums = {4,2,4,4,5,1,10,8,6,5,7,100};
System.out.println(Arrays.toString(nums));
QuickSort(nums,0,nums.length-1);
System.out.println(Arrays.toString(nums));
}
private static void QuickSort(int[] nums, int beigin, int end) {
if(beigin > end){
return ;
}
int i = beigin;
int j = end;
int v = nums[beigin];
while(i < j ){
while(i < j && nums[j]> v){
j--;
}
while(i < j && nums[i] <= v){
i++;
}
int temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
}
nums[beigin] = nums[i];
nums[i] = v;
QuickSort(nums,beigin,i-1);
QuickSort(nums,i+1,end);
}
}
聚簇索引和非聚簇索引的区别
聚簇索引:索引项的排序方式和表中数据记录排序方式一致的索引(字典中的拼音查找汉字)innodb
非聚集索引:索引顺序与物理存储顺序不同(字典中的偏旁部首查找汉字)myisam
聚簇索引的叶子节点就是数据节点,索引和数据在一起。
稠密索引和稀疏索引
稠密索引:每个索引键值对都对应一个索引项;
稀疏索引:只为某些搜索码值建立索引记录;
稀疏索引的优点是:所占用的空间更小,且插入和删除时维护开销也小。
寻找数据中第k大的值(基于快排)
public class Quic4 {
public int findKthLargest(int[] nums, int k) {
return getKth(nums, 0, nums.length - 1, nums.length - k);
}
public int getKth(int[] nums, int start, int end, int k) {
int pivot = nums[start];
int left = start;
int right = end;
while (left < right) {
while (left < right && nums[right] > pivot) {
right--;
}
while (left < right && nums[left] <= pivot) {
left++;
}
swap(nums, left, right);
}
swap(nums, left, start);
if (k == left) {
return pivot;
} else if (k < left) {
return getKth(nums, start, left - 1, k);
} else {
return getKth(nums, left + 1, end, k);
}
}
public void swap(int[] nums, int n1, int n2) {
int tmp = nums[n1];
nums[n1] = nums[n2];
nums[n2] = tmp;
}
}